+++ /dev/null
---TEST--
-Bug #73181: parse_str() without a second argument leads to crash
---FILE--
-<?php
-
-function x() {
- parse_str("1&x");
- var_dump(get_defined_vars());
-}
-
-x();
-
-?>
---EXPECTF--
-Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
-array(2) {
- [1]=>
- string(0) ""
- ["x"]=>
- string(0) ""
-}
$func = 'compact';
$func(['a']);
- $func = 'parse_str';
- $func('a=b');
-
$func = 'get_defined_vars';
$func();
Warning: Cannot call compact() dynamically in %s on line %d
-Warning: Cannot call parse_str() with a single argument dynamically in %s on line %d
-
Warning: Cannot call get_defined_vars() dynamically in %s on line %d
Warning: Cannot call assert() with string argument dynamically in %s on line %d
+++ /dev/null
---TEST--
-Calling parse_str through argument unpacking
---FILE--
-<?php
-
-function test() {
- $i = 0;
- parse_str(...["i=41"]);
- var_dump($i + 1);
-}
-test();
-
-?>
---EXPECTF--
-Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
-int(42)
+++ /dev/null
---TEST--
-$this re-assign in mb_parse_str()
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-function foo() {
- mb_parse_str("this=42");
- var_dump($this);
-}
-foo();
-?>
---EXPECTF--
-Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
-
-Fatal error: Uncaught Error: Cannot re-assign $this in %sthis_in_mb_parse_str.php:3
-Stack trace:
-#0 %sthis_in_mb_parse_str.php(3): mb_parse_str('this=42')
-#1 %sthis_in_mb_parse_str.php(6): foo()
-#2 {main}
- thrown in %sthis_in_mb_parse_str.php on line 3
+++ /dev/null
---TEST--
-$this re-assign in parse_str()
---FILE--
-<?php
-function foo() {
- parse_str("this=42");
- var_dump($this);
-}
-foo();
-?>
---EXPECTF--
-Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
-
-Fatal error: Uncaught Error: Cannot re-assign $this in %sthis_in_parse_str.php:3
-Stack trace:
-#0 %sthis_in_parse_str.php(3): parse_str('this=42')
-#1 %sthis_in_parse_str.php(6): foo()
-#2 {main}
- thrown in %sthis_in_parse_str.php on line 3
ZEND_ARG_INFO(0, encoding)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_parse_str, 0, 0, 1)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_parse_str, 0, 0, 2)
ZEND_ARG_INFO(0, encoded_string)
ZEND_ARG_INFO(1, result)
ZEND_END_ARG_INFO()
#define IS_SJIS1(c) ((((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xf5)) ? 1 : 0)
#define IS_SJIS2(c) ((((c)>=0x40 && (c)<=0x7e) || ((c)>=0x80 && (c)<=0xfc)) ? 1 : 0)
-/* {{{ proto bool mb_parse_str(string encoded_string [, array result])
+/* {{{ proto bool mb_parse_str(string encoded_string, array &result)
Parses GET/POST/COOKIE data and sets global variables */
PHP_FUNCTION(mb_parse_str)
{
- zval *track_vars_array = NULL;
- char *encstr = NULL;
+ zval *track_vars_array;
+ char *encstr;
size_t encstr_len;
php_mb_encoding_handler_info_t info;
const mbfl_encoding *detected;
track_vars_array = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|z", &encstr, &encstr_len, &track_vars_array) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "sz", &encstr, &encstr_len, &track_vars_array) == FAILURE) {
return;
}
- if (track_vars_array != NULL) {
- track_vars_array = zend_try_array_init(track_vars_array);
- if (!track_vars_array) {
- return;
- }
+ track_vars_array = zend_try_array_init(track_vars_array);
+ if (!track_vars_array) {
+ return;
}
encstr = estrndup(encstr, encstr_len);
info.num_from_encodings = MBSTRG(http_input_list_size);
info.from_language = MBSTRG(language);
- if (track_vars_array != NULL) {
- detected = _php_mb_encoding_handler_ex(&info, track_vars_array, encstr);
- } else {
- zval tmp;
- zend_array *symbol_table;
- if (zend_forbid_dynamic_call("mb_parse_str() with a single argument") == FAILURE) {
- efree(encstr);
- return;
- }
-
- php_error_docref(NULL, E_DEPRECATED, "Calling mb_parse_str() without the result argument is deprecated");
-
- symbol_table = zend_rebuild_symbol_table();
- ZVAL_ARR(&tmp, symbol_table);
- detected = _php_mb_encoding_handler_ex(&info, &tmp, encstr);
- }
+ detected = _php_mb_encoding_handler_ex(&info, track_vars_array, encstr);
MBSTRG(http_input_identify) = detected;
+++ /dev/null
---TEST--
-Bug #20087 (Assertion failure)
---SKIPIF--
-<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---FILE--
-<?php
-ini_set('include_path', dirname(__FILE__));
-include_once('common.inc');
-$testmoo = "blah blah";
-var_dump(mb_parse_str("testmoo"));
-var_dump($testmoo);
-var_dump(mb_parse_str("test=moo"));
-var_dump($test);
-?>
---EXPECT--
-ERR: Deprecated
-bool(true)
-string(0) ""
-ERR: Deprecated
-bool(true)
-string(3) "moo"
Bug #48697 (mb_internal_encoding() value gets reset by parse_str() or mb_parse_str()
--SKIPIF--
<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
---INI--
-error_reporting=E_ALL & ~E_DEPRECATED
--FILE--
<?php
ini_set('mbstring.internal_encoding', 'ISO-8859-15');
var_dump(mb_internal_encoding());
mb_internal_encoding('UTF-8');
var_dump(mb_internal_encoding());
-parse_str('a=b');
+parse_str('a=b', $ary);
var_dump(mb_internal_encoding());
mb_internal_encoding('UTF-8');
var_dump(mb_internal_encoding());
-parse_str('a=b');
+parse_str('a=b', $ary);
var_dump(mb_internal_encoding());
?>
---EXPECT--
+--EXPECTF--
+Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in %s on line %d
string(11) "ISO-8859-15"
string(5) "UTF-8"
string(5) "UTF-8"
var_dump($array);
var_dump($foo);
var_dump($bar);
- mb_parse_str($query);
- var_dump($foo);
- var_dump($bar);
}
foreach ($queries as $query) {
test($query);
}
string(0) ""
string(0) ""
-
-Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
-string(3) "abc"
-string(3) "def"
array(2) {
["+foo"]=>
string(3) "def"
}
string(0) ""
string(0) ""
-
-Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
-string(0) ""
-string(0) ""
array(2) {
["foo"]=>
array(3) {
}
string(0) ""
string(0) ""
-
-Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
-array(3) {
- [0]=>
- string(3) "abc"
- [1]=>
- string(3) "def"
- [2]=>
- string(3) "ghi"
-}
-array(1) {
- [0]=>
- string(3) "jkl"
-}
var_dump($foo);
var_dump($bar);
var_dump($fubar);
- mb_parse_str($query);
- var_dump($foo);
- var_dump($bar);
- var_dump($fubar);
}
foreach ($queries as $query) {
test($query);
string(0) ""
string(0) ""
string(0) ""
-
-Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
-string(3) "abc"
-string(3) "def"
-string(3) "ghi"
array(3) {
["+foo"]=>
string(3) "def"
string(0) ""
string(0) ""
string(0) ""
-
-Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
-string(0) ""
-string(0) ""
-string(0) ""
array(3) {
["foo"]=>
array(4) {
string(0) ""
string(0) ""
string(0) ""
-
-Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
-array(4) {
- [0]=>
- string(3) "abc"
- [1]=>
- string(3) "def"
- [2]=>
- string(3) "ghi"
- [3]=>
- string(0) ""
-}
-array(1) {
- [0]=>
- string(0) ""
-}
-array(1) {
- [0]=>
- string(1) "="
-}
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
} else if (zend_string_equals_literal(name, "compact")) {
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
- } else if (zend_string_equals_literal(name, "parse_str") && num_args <= 1) {
- return ZEND_FUNC_INDIRECT_VAR_ACCESS;
- } else if (zend_string_equals_literal(name, "mb_parse_str") && num_args <= 1) {
- return ZEND_FUNC_INDIRECT_VAR_ACCESS;
} else if (zend_string_equals_literal(name, "get_defined_vars")) {
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
} else if (zend_string_equals_literal(name, "assert")) {
ZEND_ARG_VARIADIC_INFO(0, locales)
ZEND_END_ARG_INFO()
-ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_str, 0, 0, 1)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_str, 0, 0, 2)
ZEND_ARG_INFO(0, encoded_string)
ZEND_ARG_INFO(1, result)
ZEND_END_ARG_INFO()
}
/* }}} */
-/* {{{ proto void parse_str(string encoded_string [, array &result])
+/* {{{ proto void parse_str(string encoded_string, array &result)
Parses GET/POST/COOKIE data and sets global variables */
PHP_FUNCTION(parse_str)
{
char *res = NULL;
size_t arglen;
- ZEND_PARSE_PARAMETERS_START(1, 2)
+ ZEND_PARSE_PARAMETERS_START(2, 2)
Z_PARAM_STRING(arg, arglen)
- Z_PARAM_OPTIONAL
Z_PARAM_ZVAL(arrayArg)
ZEND_PARSE_PARAMETERS_END();
- res = estrndup(arg, arglen);
-
- if (arrayArg == NULL) {
- zval tmp;
- zend_array *symbol_table;
- if (zend_forbid_dynamic_call("parse_str() with a single argument") == FAILURE) {
- efree(res);
- return;
- }
-
- php_error_docref(NULL, E_DEPRECATED, "Calling parse_str() without the result argument is deprecated");
-
- symbol_table = zend_rebuild_symbol_table();
- ZVAL_ARR(&tmp, symbol_table);
- sapi_module.treat_data(PARSE_STRING, res, &tmp);
- if (UNEXPECTED(zend_hash_del(symbol_table, ZSTR_KNOWN(ZEND_STR_THIS)) == SUCCESS)) {
- zend_throw_error(NULL, "Cannot re-assign $this");
- }
- } else {
- arrayArg = zend_try_array_init(arrayArg);
- if (!arrayArg) {
- return;
- }
-
- sapi_module.treat_data(PARSE_STRING, res, arrayArg);
+ arrayArg = zend_try_array_init(arrayArg);
+ if (!arrayArg) {
+ return;
}
+
+ res = estrndup(arg, arglen);
+ sapi_module.treat_data(PARSE_STRING, res, arrayArg);
}
/* }}} */
+++ /dev/null
---TEST--
-Bug #24208 (parse_str() is not working)
---FILE--
-<?php
-$a = $b = $c = "oops";
-parse_str("a=1&b=2&c=3");
-var_dump($a, $b, $c);
-?>
---EXPECTF--
-Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
-string(1) "1"
-string(1) "2"
-string(1) "3"
Bug #77439: parse_str segfaults when inserting item into existing array
--FILE--
<?php
-$a = [];
-parse_str('a[1]=1');
-var_dump($a);
+$vars = ['a' => []];
+parse_str('a[1]=1', $vars);
+var_dump($vars['a']);
?>
---EXPECTF--
-Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
+--EXPECT--
array(1) {
[1]=>
string(1) "1"
--FILE--
<?php
-/* Prototype : void parse_str ( string $str [, array &$arr ] )
+/* Prototype : void parse_str ( string $str , array &$arr )
* Description: Parses the string into variables
* Source code: ext/standard/string.c
*/
echo "*** Testing parse_str() : basic functionality ***\n";
-echo "Basic test WITHOUT result arg\n";
-$s1 = "first=val1&second=val2&third=val3";
-var_dump(parse_str($s1));
-var_dump($first, $second, $third);
-
echo "\nBasic test WITH undefined var for result arg\n";
$s1 = "first=val1&second=val2&third=val3";
var_dump(parse_str($s1, $res1));
===DONE===
--EXPECTF--
*** Testing parse_str() : basic functionality ***
-Basic test WITHOUT result arg
-
-Deprecated: parse_str(): Calling parse_str() without the result argument is deprecated in %s on line %d
-NULL
-string(4) "val1"
-string(4) "val2"
-string(4) "val3"
Basic test WITH undefined var for result arg
NULL
arg_separator.input = "/"
--FILE--
<?php
-/* Prototype : void parse_str ( string $str [, array &$arr ] )
+/* Prototype : void parse_str ( string $str , array &$arr )
* Description: Parses the string into variables
* Source code: ext/standard/string.c
*/
echo "*** Testing parse_str() : error conditions ***\n";
-echo "\n-- Testing htmlentities() function with less than expected no. of arguments --\n";
+echo "\n-- Testing parse_str() function with less than expected no. of arguments --\n";
parse_str();
-echo "\n-- Testing htmlentities() function with more than expected no. of arguments --\n";
+echo "\n-- Testing parse_str() function with more than expected no. of arguments --\n";
$s1 = "first=val1&second=val2&third=val3";
parse_str($s1, $res_array, true);
--EXPECTF--
*** Testing parse_str() : error conditions ***
--- Testing htmlentities() function with less than expected no. of arguments --
+-- Testing parse_str() function with less than expected no. of arguments --
-Warning: parse_str() expects at least 1 parameter, 0 given in %s on line %d
+Warning: parse_str() expects exactly 2 parameters, 0 given in %s on line %d
--- Testing htmlentities() function with more than expected no. of arguments --
+-- Testing parse_str() function with more than expected no. of arguments --
-Warning: parse_str() expects at most 2 parameters, 3 given in %s on line %d
+Warning: parse_str() expects exactly 2 parameters, 3 given in %s on line %d
===DONE===