]> granicus.if.org Git - php/commitdiff
Require second argument on (mb_)parse_str()
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 28 Jan 2019 12:34:36 +0000 (13:34 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 28 Jan 2019 14:58:24 +0000 (15:58 +0100)
This was deprecated in PHP 7.2 as part of
https://wiki.php.net/rfc/deprecations_php_7_2.

18 files changed:
Zend/tests/bug73181.phpt [deleted file]
Zend/tests/dynamic_call_006.phpt
Zend/tests/parse_str_with_unpack.phpt [deleted file]
Zend/tests/this_in_mb_parse_str.phpt [deleted file]
Zend/tests/this_in_parse_str.phpt [deleted file]
ext/mbstring/mbstring.c
ext/mbstring/tests/bug20087.phpt [deleted file]
ext/mbstring/tests/bug48697.phpt
ext/mbstring/tests/mb_parse_str.phpt
ext/mbstring/tests/mb_parse_str02.phpt
ext/opcache/Optimizer/zend_optimizer.c
ext/standard/basic_functions.c
ext/standard/string.c
ext/standard/tests/strings/bug24208.phpt [deleted file]
ext/standard/tests/strings/bug77439.phpt
ext/standard/tests/strings/parse_str_basic1.phpt
ext/standard/tests/strings/parse_str_basic3.phpt
ext/standard/tests/strings/parse_str_error1.phpt

diff --git a/Zend/tests/bug73181.phpt b/Zend/tests/bug73181.phpt
deleted file mode 100644 (file)
index 3ab93eb..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---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) ""
-}
index 058e22fda0d347d97b12bacafd6edb432409861a..a1371eeebefdbc5e8ed0aaa76886b0930b72db49 100644 (file)
@@ -9,9 +9,6 @@ function test() {
     $func = 'compact';
     $func(['a']);
 
-    $func = 'parse_str';
-    $func('a=b');
-
     $func = 'get_defined_vars';
     $func();
 
@@ -35,8 +32,6 @@ Warning: Cannot call extract() dynamically in %s on line %d
 
 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
diff --git a/Zend/tests/parse_str_with_unpack.phpt b/Zend/tests/parse_str_with_unpack.phpt
deleted file mode 100644 (file)
index 8daa711..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
---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)
diff --git a/Zend/tests/this_in_mb_parse_str.phpt b/Zend/tests/this_in_mb_parse_str.phpt
deleted file mode 100644 (file)
index 2d5af47..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---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
diff --git a/Zend/tests/this_in_parse_str.phpt b/Zend/tests/this_in_parse_str.phpt
deleted file mode 100644 (file)
index 0bd9064..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---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
index bba2d8ef69f8a5543231201f8a806b90490fddcd..f67fe507cd910faf986f410c2ecf69471138d6b0 100644 (file)
@@ -203,7 +203,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_preferred_mime_name, 0, 0, 1)
        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()
@@ -2037,26 +2037,24 @@ PHP_FUNCTION(mb_preferred_mime_name)
 #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);
@@ -2070,22 +2068,7 @@ PHP_FUNCTION(mb_parse_str)
        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;
 
diff --git a/ext/mbstring/tests/bug20087.phpt b/ext/mbstring/tests/bug20087.phpt
deleted file mode 100644 (file)
index fc5e589..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---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"
index 93644a5f05c56869495deb356dd91e2ad7b089c8..77d1c7a7102766cde937f07b0268ab903fb55b38 100644 (file)
@@ -2,8 +2,6 @@
 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');
@@ -11,14 +9,15 @@ ini_set('mbstring.encoding_translation', true);
 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"
index 8580ac52c5af9e66deb0abf38a899f728d344337..ab504f918f1563445a02f15e6a921366d7f91950 100644 (file)
@@ -18,9 +18,6 @@ function test($query) {
        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);
@@ -35,10 +32,6 @@ array(2) {
 }
 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"
@@ -47,10 +40,6 @@ array(2) {
 }
 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) {
@@ -69,17 +58,3 @@ array(2) {
 }
 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"
-}
index e1871bf596361ec300f12fab513058e97fa1cb09..bad388ee900253ecc6e9f5db7ab9c36a71ea5cf4 100644 (file)
@@ -20,10 +20,6 @@ function test($query) {
        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);
@@ -41,11 +37,6 @@ array(3) {
 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"
@@ -57,11 +48,6 @@ array(3) {
 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) {
@@ -88,23 +74,3 @@ array(3) {
 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) "="
-}
index 22868a4c21be56b725d81fe6b0c5a30672ec0c64..0fb10c4408516daf97fcba2c4e6d23eb2dfef96a 100644 (file)
@@ -964,10 +964,6 @@ uint32_t zend_optimizer_classify_function(zend_string *name, uint32_t num_args)
                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")) {
index 4a5a98e3b4f220fae0fd262ca6db6fda889782da..d77ef73ca035a5621a639e30a74066fe72c27dfd 100644 (file)
@@ -2394,7 +2394,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_setlocale, 0, 0, 2)
        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()
index 7a8e54ad5925c273cc3a2eda49ce9b31e7518221..068c6e82c4465d5b7a3c376b4242b7366543e930 100644 (file)
@@ -4911,7 +4911,7 @@ PHP_FUNCTION(setlocale)
 }
 /* }}} */
 
-/* {{{ 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)
 {
@@ -4920,38 +4920,18 @@ 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);
 }
 /* }}} */
 
diff --git a/ext/standard/tests/strings/bug24208.phpt b/ext/standard/tests/strings/bug24208.phpt
deleted file mode 100644 (file)
index f85c9c1..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---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"
index ee8a3d284521274706e44afa7b7f273c109e2549..98ae56222bf8889aa27aac95db6a1e86e2debde7 100644 (file)
@@ -2,12 +2,11 @@
 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"
index b3f2fe5cfc77e028dc7e9ac58b0f8cd27b1f2bdd..e442c0fd70a4146bce7d53c9d1245f39fcb9392c 100644 (file)
@@ -3,18 +3,13 @@ Test parse_str() function : basic functionality
 --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));
@@ -35,13 +30,6 @@ var_dump($res3_array);
 ===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
index 0368dea5f9fc39011adac774149276d82d6d4b31..06f9579188e5e9abdc6f8e88bdfb848653dded6a 100644 (file)
Binary files a/ext/standard/tests/strings/parse_str_basic3.phpt and b/ext/standard/tests/strings/parse_str_basic3.phpt differ
index 9683a7d901bfa0fc51e0660538fd6176fc5cf92c..939bd7134ea346c2e84aec6cdc97cca4a20562b4 100644 (file)
@@ -4,16 +4,16 @@ Test parse_str() function : non-default arg_separator.input specified
 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);
 
@@ -22,11 +22,11 @@ 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===