diff --git a/NEWS b/NEWS index 8c9cf74b12c..ab4772659e9 100644 --- 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) diff --git a/ext/opcache/Optimizer/optimize_func_calls.c b/ext/opcache/Optimizer/optimize_func_calls.c index 14f82556537..886021ce977 100644 --- a/ext/opcache/Optimizer/optimize_func_calls.c +++ b/ext/opcache/Optimizer/optimize_func_calls.c @@ -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 index 00000000000..d8b953a1aa9 --- /dev/null +++ b/ext/opcache/tests/bug69159.phpt @@ -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-- + +--FILE-- + +--EXPECT-- +string(4) "okey"