From:
Operating system: fedora core 16 x64
PHP version: 5.3.9
Package: Unknown/Other Function
Bug Type: Bug
Bug description:zend_parse_parameters(): Incorrect parsing of the first
parameter
Description:
------------
Incorrect parsing of the first parameter if it's
has type of 'string' and one of next parameter has type of 'long'.
Function zend_parse_parameters() always return string length as 0 of first
parameter. Error is present in versions 5.3.7-5.3.9. In version 5.3.6 there
is
no error
On php v 5.3.6 it's correctly works
Example 1 (Error):
PHP_FUNCTION(test_parse_parameters) {
char *p_str1 = NULL;
char *p_str2 = NULL;
int p_long;
int p_str1_len;
int p_str2_len;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sls",
&p_str1, &p_str1_len, &p_long, &p_str2, &p_str2_len)) {
return;
}
zend_error(E_WARNING, "First parameter: '%s' and it len: %d", p_str1,
p_str1_len);
zend_error(E_WARNING, "Second parameter: '%d'", p_long);
zend_error(E_WARNING, "Third parameter: '%s' and it len: %d", p_str2,
p_str2_len);
}
Run:
[antonio@antonio]# php -r 'test_parse_parameters("first", 123, "third");'
Output:
>>> PHP Warning: First parameter: 'first' and it len: 0 in Command line
code on
line 1 <<<
PHP Warning: Second parameter: '123' in Command line code on line 1
PHP Warning: Third parameter: 'third' and it len: 5 in Command line code
on
line 1
Exemple 2 (Error):
PHP_FUNCTION(test_parse_parameters) {
char *p_str1 = NULL;
char *p_str2 = NULL;
int p_str1_len;
int p_str2_len;
int p_long;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ssl",
&p_str1, &p_str1_len, &p_str2, &p_str2_len, &p_long)) {
return;
}
zend_error(E_WARNING, "First parameter: '%s' and it len: %d", p_str1,
p_str1_len);
zend_error(E_WARNING, "Second parameter: '%s' and it len: %d", p_str2,
p_str2_len);
zend_error(E_WARNING, "Third parameter: '%d'", p_long);
}
Run:
[antonio@antonio]# php -r 'dwavd_init("first", "second", 123);'
Output:
>>> PHP Warning: First parameter: 'first' and it len: 0 in Command line
code on
line 1 <<<
PHP Warning: Second parameter: 'second' and it len: 6 in Command line code
on
line 1
PHP Warning: Third parameter: '123' in Command line code on line 1
Exemple 3 (OK):
PHP_FUNCTION(test_parse_parameters) {
char *p_str1 = NULL;
char *p_str2 = NULL;
int p_str1_len;
int p_str2_len;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss",
&p_str1,
&p_str1_len, &p_str2, &p_str2_len)) {
return;
}
zend_error(E_WARNING, "First parameter: '%s' and it len: %d", p_str1,
p_str1_len);
zend_error(E_WARNING, "Second parameter: '%s' and it len: %d", p_str2,
p_str2_len);
}
Run:
[antonio@antonio]# php -r 'test_parse_parameters("first", "second");'
Output:
PHP Warning: First parameter: 'first' and it len: 5 in Command line code
on
line 1
PHP Warning: Second parameter: 'second' and it len: 6 in Command line code
on
line 1
Exemple 4 (OK):
PHP_FUNCTION(test_parse_parameters) {
char *p_str1 = NULL;
char *p_str2 = NULL;
int p_str1_len;
int p_str2_len;
int p_long;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lss",
&p_long, &p_str1, &p_str1_len, &p_str2, &p_str2_len)) {
return;
}
zend_error(E_WARNING, "First parameter: '%d'", p_long);
zend_error(E_WARNING, "Second parameter: '%s' and it len: %d", p_str1,
p_str1_len);
zend_error(E_WARNING, "Third parameter: '%s' and it len: %d", p_str2,
p_str2_len);
}
Run:
[antonio@antonio]# php -r 'test_parse_parameters(123, "second",
"third");'
Output:
PHP Warning: First parameter: '123' in Command line code on line 1
PHP Warning: Second parameter: 'second' and it len: 5 in Command line code
on
line 1
PHP Warning: Third parameter: 'third' and it len: 6 in Command line code
on
line 1
--
Edit bug report at https://bugs.php.net/bug.php?id=60725&edit=1
--
Try a snapshot (PHP 5.4):
https://bugs.php.net/fix.php?id=60725&r=trysnapshot54
Try a snapshot (PHP 5.3):
https://bugs.php.net/fix.php?id=60725&r=trysnapshot53
Try a snapshot (trunk):
https://bugs.php.net/fix.php?id=60725&r=trysnapshottrunk
Fixed in SVN:
https://bugs.php.net/fix.php?id=60725&r=fixed
Fixed in SVN and need be documented:
https://bugs.php.net/fix.php?id=60725&r=needdocs
Fixed in release:
https://bugs.php.net/fix.php?id=60725&r=alreadyfixed
Need backtrace:
https://bugs.php.net/fix.php?id=60725&r=needtrace
Need Reproduce Script:
https://bugs.php.net/fix.php?id=60725&r=needscript
Try newer version:
https://bugs.php.net/fix.php?id=60725&r=oldversion
Not developer issue:
https://bugs.php.net/fix.php?id=60725&r=support
Expected behavior:
https://bugs.php.net/fix.php?id=60725&r=notwrong
Not enough info:
https://bugs.php.net/fix.php?id=60725&r=notenoughinfo
Submitted twice:
https://bugs.php.net/fix.php?id=60725&r=submittedtwice
register_globals:
https://bugs.php.net/fix.php?id=60725&r=globals
PHP 4 support discontinued:
https://bugs.php.net/fix.php?id=60725&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=60725&r=dst
IIS Stability:
https://bugs.php.net/fix.php?id=60725&r=isapi
Install GNU Sed:
https://bugs.php.net/fix.php?id=60725&r=gnused
Floating point limitations:
https://bugs.php.net/fix.php?id=60725&r=float
No Zend Extensions:
https://bugs.php.net/fix.php?id=60725&r=nozend
MySQL Configuration Error:
https://bugs.php.net/fix.php?id=60725&r=mysqlcfg