Skip to content

Commit ff780fe

Browse files
committed
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.
1 parent 331e56c commit ff780fe

18 files changed

+34
-264
lines changed

Zend/tests/bug73181.phpt

Lines changed: 0 additions & 21 deletions
This file was deleted.

Zend/tests/dynamic_call_006.phpt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,6 @@ function test() {
99
$func = 'compact';
1010
$func(['a']);
1111

12-
$func = 'parse_str';
13-
$func('a=b');
14-
1512
$func = 'get_defined_vars';
1613
$func();
1714

@@ -35,8 +32,6 @@ Warning: Cannot call extract() dynamically in %s on line %d
3532

3633
Warning: Cannot call compact() dynamically in %s on line %d
3734

38-
Warning: Cannot call parse_str() with a single argument dynamically in %s on line %d
39-
4035
Warning: Cannot call get_defined_vars() dynamically in %s on line %d
4136

4237
Warning: Cannot call assert() with string argument dynamically in %s on line %d

Zend/tests/parse_str_with_unpack.phpt

Lines changed: 0 additions & 16 deletions
This file was deleted.

Zend/tests/this_in_mb_parse_str.phpt

Lines changed: 0 additions & 21 deletions
This file was deleted.

Zend/tests/this_in_parse_str.phpt

Lines changed: 0 additions & 19 deletions
This file was deleted.

ext/mbstring/mbstring.c

Lines changed: 9 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_preferred_mime_name, 0, 0, 1)
203203
ZEND_ARG_INFO(0, encoding)
204204
ZEND_END_ARG_INFO()
205205

206-
ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_parse_str, 0, 0, 1)
206+
ZEND_BEGIN_ARG_INFO_EX(arginfo_mb_parse_str, 0, 0, 2)
207207
ZEND_ARG_INFO(0, encoded_string)
208208
ZEND_ARG_INFO(1, result)
209209
ZEND_END_ARG_INFO()
@@ -2037,26 +2037,24 @@ PHP_FUNCTION(mb_preferred_mime_name)
20372037
#define IS_SJIS1(c) ((((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xf5)) ? 1 : 0)
20382038
#define IS_SJIS2(c) ((((c)>=0x40 && (c)<=0x7e) || ((c)>=0x80 && (c)<=0xfc)) ? 1 : 0)
20392039

2040-
/* {{{ proto bool mb_parse_str(string encoded_string [, array result])
2040+
/* {{{ proto bool mb_parse_str(string encoded_string, array &result)
20412041
Parses GET/POST/COOKIE data and sets global variables */
20422042
PHP_FUNCTION(mb_parse_str)
20432043
{
2044-
zval *track_vars_array = NULL;
2045-
char *encstr = NULL;
2044+
zval *track_vars_array;
2045+
char *encstr;
20462046
size_t encstr_len;
20472047
php_mb_encoding_handler_info_t info;
20482048
const mbfl_encoding *detected;
20492049

20502050
track_vars_array = NULL;
2051-
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s|z", &encstr, &encstr_len, &track_vars_array) == FAILURE) {
2051+
if (zend_parse_parameters(ZEND_NUM_ARGS(), "sz", &encstr, &encstr_len, &track_vars_array) == FAILURE) {
20522052
return;
20532053
}
20542054

2055-
if (track_vars_array != NULL) {
2056-
track_vars_array = zend_try_array_init(track_vars_array);
2057-
if (!track_vars_array) {
2058-
return;
2059-
}
2055+
track_vars_array = zend_try_array_init(track_vars_array);
2056+
if (!track_vars_array) {
2057+
return;
20602058
}
20612059

20622060
encstr = estrndup(encstr, encstr_len);
@@ -2070,22 +2068,7 @@ PHP_FUNCTION(mb_parse_str)
20702068
info.num_from_encodings = MBSTRG(http_input_list_size);
20712069
info.from_language = MBSTRG(language);
20722070

2073-
if (track_vars_array != NULL) {
2074-
detected = _php_mb_encoding_handler_ex(&info, track_vars_array, encstr);
2075-
} else {
2076-
zval tmp;
2077-
zend_array *symbol_table;
2078-
if (zend_forbid_dynamic_call("mb_parse_str() with a single argument") == FAILURE) {
2079-
efree(encstr);
2080-
return;
2081-
}
2082-
2083-
php_error_docref(NULL, E_DEPRECATED, "Calling mb_parse_str() without the result argument is deprecated");
2084-
2085-
symbol_table = zend_rebuild_symbol_table();
2086-
ZVAL_ARR(&tmp, symbol_table);
2087-
detected = _php_mb_encoding_handler_ex(&info, &tmp, encstr);
2088-
}
2071+
detected = _php_mb_encoding_handler_ex(&info, track_vars_array, encstr);
20892072

20902073
MBSTRG(http_input_identify) = detected;
20912074

ext/mbstring/tests/bug20087.phpt

Lines changed: 0 additions & 21 deletions
This file was deleted.

ext/mbstring/tests/bug48697.phpt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,22 @@
22
Bug #48697 (mb_internal_encoding() value gets reset by parse_str() or mb_parse_str()
33
--SKIPIF--
44
<?php extension_loaded('mbstring') or die('skip mbstring not available'); ?>
5-
--INI--
6-
error_reporting=E_ALL & ~E_DEPRECATED
75
--FILE--
86
<?php
97
ini_set('mbstring.internal_encoding', 'ISO-8859-15');
108
ini_set('mbstring.encoding_translation', true);
119
var_dump(mb_internal_encoding());
1210
mb_internal_encoding('UTF-8');
1311
var_dump(mb_internal_encoding());
14-
parse_str('a=b');
12+
parse_str('a=b', $ary);
1513
var_dump(mb_internal_encoding());
1614
mb_internal_encoding('UTF-8');
1715
var_dump(mb_internal_encoding());
18-
parse_str('a=b');
16+
parse_str('a=b', $ary);
1917
var_dump(mb_internal_encoding());
2018
?>
21-
--EXPECT--
19+
--EXPECTF--
20+
Deprecated: ini_set(): Use of mbstring.internal_encoding is deprecated in %s on line %d
2221
string(11) "ISO-8859-15"
2322
string(5) "UTF-8"
2423
string(5) "UTF-8"

ext/mbstring/tests/mb_parse_str.phpt

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,6 @@ function test($query) {
1818
var_dump($array);
1919
var_dump($foo);
2020
var_dump($bar);
21-
mb_parse_str($query);
22-
var_dump($foo);
23-
var_dump($bar);
2421
}
2522
foreach ($queries as $query) {
2623
test($query);
@@ -35,10 +32,6 @@ array(2) {
3532
}
3633
string(0) ""
3734
string(0) ""
38-
39-
Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
40-
string(3) "abc"
41-
string(3) "def"
4235
array(2) {
4336
["+foo"]=>
4437
string(3) "def"
@@ -47,10 +40,6 @@ array(2) {
4740
}
4841
string(0) ""
4942
string(0) ""
50-
51-
Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
52-
string(0) ""
53-
string(0) ""
5443
array(2) {
5544
["foo"]=>
5645
array(3) {
@@ -69,17 +58,3 @@ array(2) {
6958
}
7059
string(0) ""
7160
string(0) ""
72-
73-
Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
74-
array(3) {
75-
[0]=>
76-
string(3) "abc"
77-
[1]=>
78-
string(3) "def"
79-
[2]=>
80-
string(3) "ghi"
81-
}
82-
array(1) {
83-
[0]=>
84-
string(3) "jkl"
85-
}

ext/mbstring/tests/mb_parse_str02.phpt

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,6 @@ function test($query) {
2020
var_dump($foo);
2121
var_dump($bar);
2222
var_dump($fubar);
23-
mb_parse_str($query);
24-
var_dump($foo);
25-
var_dump($bar);
26-
var_dump($fubar);
2723
}
2824
foreach ($queries as $query) {
2925
test($query);
@@ -41,11 +37,6 @@ array(3) {
4137
string(0) ""
4238
string(0) ""
4339
string(0) ""
44-
45-
Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
46-
string(3) "abc"
47-
string(3) "def"
48-
string(3) "ghi"
4940
array(3) {
5041
["+foo"]=>
5142
string(3) "def"
@@ -57,11 +48,6 @@ array(3) {
5748
string(0) ""
5849
string(0) ""
5950
string(0) ""
60-
61-
Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
62-
string(0) ""
63-
string(0) ""
64-
string(0) ""
6551
array(3) {
6652
["foo"]=>
6753
array(4) {
@@ -88,23 +74,3 @@ array(3) {
8874
string(0) ""
8975
string(0) ""
9076
string(0) ""
91-
92-
Deprecated: mb_parse_str(): Calling mb_parse_str() without the result argument is deprecated in %s on line %d
93-
array(4) {
94-
[0]=>
95-
string(3) "abc"
96-
[1]=>
97-
string(3) "def"
98-
[2]=>
99-
string(3) "ghi"
100-
[3]=>
101-
string(0) ""
102-
}
103-
array(1) {
104-
[0]=>
105-
string(0) ""
106-
}
107-
array(1) {
108-
[0]=>
109-
string(1) "="
110-
}

ext/opcache/Optimizer/zend_optimizer.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -964,10 +964,6 @@ uint32_t zend_optimizer_classify_function(zend_string *name, uint32_t num_args)
964964
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
965965
} else if (zend_string_equals_literal(name, "compact")) {
966966
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
967-
} else if (zend_string_equals_literal(name, "parse_str") && num_args <= 1) {
968-
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
969-
} else if (zend_string_equals_literal(name, "mb_parse_str") && num_args <= 1) {
970-
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
971967
} else if (zend_string_equals_literal(name, "get_defined_vars")) {
972968
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
973969
} else if (zend_string_equals_literal(name, "assert")) {

ext/standard/basic_functions.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2394,7 +2394,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_setlocale, 0, 0, 2)
23942394
ZEND_ARG_VARIADIC_INFO(0, locales)
23952395
ZEND_END_ARG_INFO()
23962396

2397-
ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_str, 0, 0, 1)
2397+
ZEND_BEGIN_ARG_INFO_EX(arginfo_parse_str, 0, 0, 2)
23982398
ZEND_ARG_INFO(0, encoded_string)
23992399
ZEND_ARG_INFO(1, result)
24002400
ZEND_END_ARG_INFO()

0 commit comments

Comments
 (0)