]> granicus.if.org Git - php/commitdiff
Fixed bug #69159 (Opcache causes problem when passing a variable variable to a function)
authorXinchen Hui <laruence@php.net>
Wed, 4 Mar 2015 06:48:41 +0000 (14:48 +0800)
committerXinchen Hui <laruence@php.net>
Wed, 4 Mar 2015 06:48:41 +0000 (14:48 +0800)
NEWS
ext/opcache/Optimizer/optimize_func_calls.c
ext/opcache/tests/bug69159.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 8c9cf74b12c1ff6f9b58861a9b3f5a0ca1b042a0..ab4772659e90b26275cdcb9f8f5d2fcd8d0a6c5d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,8 @@
   . Fixed bug #68964 (Allowed memory size exhausted with odbc_exec). (Anatol)
 
 - Opcache:
+  . Fixed bug #69159 (Opcache causes problem when passing a variable variable 
+    to a function). (Dmitry, Laruence)
   . Fixed bug #69125 (Array numeric string as key). (Laruence)
   . Fixed bug #69038 (switch(SOMECONSTANT) misbehaves). (Laruence)
 
index 14f82556537903349fbda3d861c21513dcdaaf7b..886021ce97768b504a9fbfb9a115fa3d681105e9 100644 (file)
@@ -82,10 +82,10 @@ static void optimize_func_calls(zend_op_array *op_array, zend_persistent_script
                        case ZEND_FETCH_DIM_FUNC_ARG:
                                if (call_stack[call - 1].func) {
                                        if (ARG_SHOULD_BE_SENT_BY_REF(call_stack[call - 1].func, (opline->extended_value & ZEND_FETCH_ARG_MASK))) {
-                                               opline->extended_value = 0;
+                                               opline->extended_value &= ZEND_FETCH_TYPE_MASK;
                                                opline->opcode -= 9;
                                        } else {
-                                               opline->extended_value = 0;
+                                               opline->extended_value &= ZEND_FETCH_TYPE_MASK;
                                                opline->opcode -= 12;
                                        }
                                }
diff --git a/ext/opcache/tests/bug69159.phpt b/ext/opcache/tests/bug69159.phpt
new file mode 100644 (file)
index 0000000..d8b953a
--- /dev/null
@@ -0,0 +1,20 @@
+--TEST--
+Bug #69159 (Opcache causes problem when passing a variable variable to a function)
+--INI--
+opcache.enable=1
+opcache.optimization_level=-1
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+$i = 1;
+$x1 = "okey";
+myFunction(${"x$i"});
+
+function myFunction($x) {
+       var_dump($x);
+}
+
+?>
+--EXPECT--
+string(4) "okey"