From ff780feca4f1b2dd5c1b7cf692781070d49df7cb Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Mon, 28 Jan 2019 13:34:36 +0100 Subject: [PATCH] Require second argument on (mb_)parse_str() This was deprecated in PHP 7.2 as part of https://wiki.php.net/rfc/deprecations_php_7_2. --- Zend/tests/bug73181.phpt | 21 ---------- Zend/tests/dynamic_call_006.phpt | 5 --- Zend/tests/parse_str_with_unpack.phpt | 16 -------- Zend/tests/this_in_mb_parse_str.phpt | 21 ---------- Zend/tests/this_in_parse_str.phpt | 19 --------- ext/mbstring/mbstring.c | 35 +++++------------ ext/mbstring/tests/bug20087.phpt | 21 ---------- ext/mbstring/tests/bug48697.phpt | 9 ++--- ext/mbstring/tests/mb_parse_str.phpt | 25 ------------ ext/mbstring/tests/mb_parse_str02.phpt | 34 ----------------- ext/opcache/Optimizer/zend_optimizer.c | 4 -- ext/standard/basic_functions.c | 2 +- ext/standard/string.c | 36 ++++-------------- ext/standard/tests/strings/bug24208.phpt | 13 ------- ext/standard/tests/strings/bug77439.phpt | 9 ++--- .../tests/strings/parse_str_basic1.phpt | 14 +------ .../tests/strings/parse_str_basic3.phpt | Bin 5634 -> 4347 bytes .../tests/strings/parse_str_error1.phpt | 14 +++---- 18 files changed, 34 insertions(+), 264 deletions(-) delete mode 100644 Zend/tests/bug73181.phpt delete mode 100644 Zend/tests/parse_str_with_unpack.phpt delete mode 100644 Zend/tests/this_in_mb_parse_str.phpt delete mode 100644 Zend/tests/this_in_parse_str.phpt delete mode 100644 ext/mbstring/tests/bug20087.phpt delete mode 100644 ext/standard/tests/strings/bug24208.phpt diff --git a/Zend/tests/bug73181.phpt b/Zend/tests/bug73181.phpt deleted file mode 100644 index 3ab93ebf5b..0000000000 --- a/Zend/tests/bug73181.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -Bug #73181: parse_str() without a second argument leads to crash ---FILE-- - ---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) "" -} diff --git a/Zend/tests/dynamic_call_006.phpt b/Zend/tests/dynamic_call_006.phpt index 058e22fda0..a1371eeebe 100644 --- a/Zend/tests/dynamic_call_006.phpt +++ b/Zend/tests/dynamic_call_006.phpt @@ -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 index 8daa711374..0000000000 --- a/Zend/tests/parse_str_with_unpack.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -Calling parse_str through argument unpacking ---FILE-- - ---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 index 2d5af4794e..0000000000 --- a/Zend/tests/this_in_mb_parse_str.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -$this re-assign in mb_parse_str() ---SKIPIF-- - ---FILE-- - ---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 index 0bd9064d60..0000000000 --- a/Zend/tests/this_in_parse_str.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -$this re-assign in parse_str() ---FILE-- - ---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 diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index bba2d8ef69..f67fe507cd 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -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 index fc5e589bd2..0000000000 --- a/ext/mbstring/tests/bug20087.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -Bug #20087 (Assertion failure) ---SKIPIF-- - ---FILE-- - ---EXPECT-- -ERR: Deprecated -bool(true) -string(0) "" -ERR: Deprecated -bool(true) -string(3) "moo" diff --git a/ext/mbstring/tests/bug48697.phpt b/ext/mbstring/tests/bug48697.phpt index 93644a5f05..77d1c7a710 100644 --- a/ext/mbstring/tests/bug48697.phpt +++ b/ext/mbstring/tests/bug48697.phpt @@ -2,8 +2,6 @@ Bug #48697 (mb_internal_encoding() value gets reset by parse_str() or mb_parse_str() --SKIPIF-- ---INI-- -error_reporting=E_ALL & ~E_DEPRECATED --FILE-- ---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" diff --git a/ext/mbstring/tests/mb_parse_str.phpt b/ext/mbstring/tests/mb_parse_str.phpt index 8580ac52c5..ab504f918f 100644 --- a/ext/mbstring/tests/mb_parse_str.phpt +++ b/ext/mbstring/tests/mb_parse_str.phpt @@ -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" -} diff --git a/ext/mbstring/tests/mb_parse_str02.phpt b/ext/mbstring/tests/mb_parse_str02.phpt index e1871bf596..bad388ee90 100644 --- a/ext/mbstring/tests/mb_parse_str02.phpt +++ b/ext/mbstring/tests/mb_parse_str02.phpt @@ -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) "=" -} diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index 22868a4c21..0fb10c4408 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -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")) { diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 4a5a98e3b4..d77ef73ca0 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -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() diff --git a/ext/standard/string.c b/ext/standard/string.c index 7a8e54ad59..068c6e82c4 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -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 index f85c9c1e54..0000000000 --- a/ext/standard/tests/strings/bug24208.phpt +++ /dev/null @@ -1,13 +0,0 @@ ---TEST-- -Bug #24208 (parse_str() is not working) ---FILE-- - ---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" diff --git a/ext/standard/tests/strings/bug77439.phpt b/ext/standard/tests/strings/bug77439.phpt index ee8a3d2845..98ae56222b 100644 --- a/ext/standard/tests/strings/bug77439.phpt +++ b/ext/standard/tests/strings/bug77439.phpt @@ -2,12 +2,11 @@ Bug #77439: parse_str segfaults when inserting item into existing array --FILE-- []]; +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" diff --git a/ext/standard/tests/strings/parse_str_basic1.phpt b/ext/standard/tests/strings/parse_str_basic1.phpt index b3f2fe5cfc..e442c0fd70 100644 --- a/ext/standard/tests/strings/parse_str_basic1.phpt +++ b/ext/standard/tests/strings/parse_str_basic1.phpt @@ -3,18 +3,13 @@ Test parse_str() function : basic functionality --FILE-- r%HLs3BVo_0IrGlCYke;~rz-Bq7O?wAn%6 G5Gw%Rj}Ybn delta 1067 zcmcIjK}+L66ecZ&WmFb+!JGOFsWcG9Y4os`>cRD->}?NAE%Mrq8knYKX5uO$0gs-P z{0xtU#bf;k3;rB0`;uaE!J!CHzq;us z7uJtC*R8N4RC}$c-7Pu$fzrkU2Wd2DG?RXQrYEgCE0NaJ_Rqi^g2uLhFnys0aU5t9 zga<%50&GaJ8`>4-AXMQCJv7yv<~G*qRbKWN(zuUOi{#d_KaLm2v{)Q=!o>mABb1SV zXKD_&J+7Rsm-w>BxyQ>M_o>Grk1DYuhFw%z>}jJ)1dK|Mb21vejeJ~)8T%@_N;J`k z)*3vVao1oIrA+%CSefz$% z!-x*0Ecq_!)o9u*9yCJVrwpLBT(7QE9N9&R+9|@vkX1ULX`Er@F>Hk}iQ3rgjQy4A zzuC2G)JyjHOREV^O_M`rd%r&fxzsB0GuJk>%6qEYenQ^&Q!{P<^~QZ09sHNrY{Wb1 Se~|FW&&fu9vbQzytMCVsfl^ff diff --git a/ext/standard/tests/strings/parse_str_error1.phpt b/ext/standard/tests/strings/parse_str_error1.phpt index 9683a7d901..939bd7134e 100644 --- a/ext/standard/tests/strings/parse_str_error1.phpt +++ b/ext/standard/tests/strings/parse_str_error1.phpt @@ -4,16 +4,16 @@ Test parse_str() function : non-default arg_separator.input specified arg_separator.input = "/" --FILE--