From: Nikita Popov Date: Tue, 21 May 2019 15:35:03 +0000 (+0200) Subject: Don't evaluate functions with partial array arguments X-Git-Tag: php-7.3.7RC1~44 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=97ba6b0d8bbb20b0d4a4a0c950b582f6cfeeea27;p=php Don't evaluate functions with partial array arguments --- diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c index 1791f6a941..b25f3a08e7 100644 --- a/ext/opcache/Optimizer/sccp.c +++ b/ext/opcache/Optimizer/sccp.c @@ -1798,7 +1798,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o args[i] = get_op1_value(ctx, opline, &ctx->scdf.ssa->ops[opline - ctx->scdf.op_array->opcodes]); if (args[i]) { - if (IS_BOT(args[i])) { + if (IS_BOT(args[i]) || IS_PARTIAL_ARRAY(args[i])) { SET_RESULT_BOT(result); return; } else if (IS_TOP(args[i])) { diff --git a/ext/opcache/tests/bug78015.phpt b/ext/opcache/tests/bug78015.phpt index 9bb416e7b3..b2ecceacde 100644 --- a/ext/opcache/tests/bug78015.phpt +++ b/ext/opcache/tests/bug78015.phpt @@ -71,6 +71,12 @@ function test8($array) { return $ret[0]; } +function test9() { + global $x; + $a = ['b' => [$x]]; + return serialize($a['b']); +} + var_dump(test1()); var_dump(test2()); var_dump(test3()); @@ -79,6 +85,7 @@ var_dump(test5()); var_dump(test6()); var_dump(test7()); var_dump(test8([1])); +var_dump(test9()); ?> --EXPECTF-- @@ -103,3 +110,4 @@ array(2) { ["y"]=> int(1) } +string(14) "a:1:{i:0;i:1;}"