Skip to content

Commit 3be9212

Browse files
committed
Fix handling of parse_str() with unpack in optimizer
1 parent 70f0546 commit 3be9212

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
Calling parse_str through argument unpacking
3+
--FILE--
4+
<?php
5+
6+
function test() {
7+
$i = 0;
8+
parse_str(...["i=41"]);
9+
var_dump($i + 1);
10+
}
11+
test();
12+
13+
?>
14+
--EXPECT--
15+
int(42)

ext/opcache/Optimizer/zend_optimizer.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -596,9 +596,9 @@ uint32_t zend_optimizer_classify_function(zend_string *name, uint32_t num_args)
596596
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
597597
} else if (zend_string_equals_literal(name, "compact")) {
598598
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
599-
} else if (zend_string_equals_literal(name, "parse_str") && num_args == 1) {
599+
} else if (zend_string_equals_literal(name, "parse_str") && num_args <= 1) {
600600
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
601-
} else if (zend_string_equals_literal(name, "mb_parse_str") && num_args == 1) {
601+
} else if (zend_string_equals_literal(name, "mb_parse_str") && num_args <= 1) {
602602
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
603603
} else if (zend_string_equals_literal(name, "get_defined_vars")) {
604604
return ZEND_FUNC_INDIRECT_VAR_ACCESS;

0 commit comments

Comments
 (0)