]> granicus.if.org Git - php/commitdiff
Don't evaluate functions with partial array arguments
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 21 May 2019 15:35:03 +0000 (17:35 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 21 May 2019 15:35:03 +0000 (17:35 +0200)
ext/opcache/Optimizer/sccp.c
ext/opcache/tests/bug78015.phpt

index 1791f6a941dc3947179df4e6d60610b4836dce6f..b25f3a08e7c0ed88de3c4131a1e193e64bd91b24 100644 (file)
@@ -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])) {
index 9bb416e7b396cf7de6b83f777a05e64810622d31..b2ecceacdeb0c87870b029118a10a396ae34dcab 100644 (file)
@@ -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;}"