ID: 48658
User updated by: wharmby at uk dot ibm dot com
Reported By: wharmby at uk dot ibm dot com
Status: Open
Bug Type: Strings related
Operating System: Windows XP
PHP Version: 6CVS-2009-06-23 (snap)
New Comment:
The following new PHP 6 tests dropped into cvs tagged as XFAIL due to
this bug
ext/standard/tests/strings/parse_str_basic1
ext/standard/tests/strings/parse_str_basic3
ext/standard/tests/strings/parse_str_basic4
Previous Comments:
------------------------------------------------------------------------
[2009-06-23 09:51:40] wharmby at uk dot ibm dot com
Description:
------------
Optional result argument of parse_str now has to be predefined as an
array. In previous versions the 2nd optional argument of parse-str
could either be an undefined variable or even an existing non-array
variable. Either way the function returned the expected array populated
with the parsed string. In PHP 6.0 the argument has to
be a pre-defined array.
Modifying the test below as follows:
<?php
$s1 = "first=val1&second=val2&third=val3";
$res1 = array();
parse_str($s1, $res1);
var_dump($res1);
?>
fixes the problem but this is not required on 5.2 and 5.3 so
requirement will break applications when they are ported to PHP6.
Is this an intended change in behavior or just a side affect
introduced when parse_str modified to use zend_parse_parameters()?
Should code not be:
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z",
&enc_string, &enc_string_len, &result) == FAILURE) {
return;
}
to maintain the 5./5.3 behaiviour ?
Reproduce code:
---------------
<?php
$s1 = "first=val1&second=val2&third=val3";
parse_str($s1, $res1);
var_dump($res1);
?>
Expected result:
----------------
array(3) {
[u"first"]=>
unicode(4) "val1"
[u"second"]=>
unicode(4) "val2"
[u"third"]=>
unicode(4) "val3"
}
Actual result:
--------------
NULL
Warning: parse_str() expects parameter 2 to be array, null given in
......
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=48658&edit=1