From 7cef66c6352eb6398517fcf3acde128052e0fbd9 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 16 Dec 2016 11:06:27 +0800 Subject: [PATCH] Fixed bug #73746 (Method that returns string returns UNKNOWN:0 instead) --- NEWS | 2 ++ ext/opcache/Optimizer/zend_optimizer.c | 6 ++++-- ext/opcache/tests/bug73746.phpt | 28 ++++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 ext/opcache/tests/bug73746.phpt diff --git a/NEWS b/NEWS index e6e9c3480d..1f22b923d1 100644 --- a/NEWS +++ b/NEWS @@ -23,6 +23,8 @@ PHP NEWS usage. (Andrey) - Opcache: + . Fixed bug #73746 (Method that returns string returns UNKNOWN:0 instead). + (Laruence) . Fixed bug #73654 (Segmentation fault in zend_call_function). (Nikita) . Fixed bug #73668 ("SIGFPE Arithmetic exception" in opcache when divide by minus 1). (Nikita) diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index b6506e0175..ef79eb86dc 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -506,7 +506,6 @@ int zend_optimizer_replace_by_const(zend_op_array *op_array, } case ZEND_VERIFY_RETURN_TYPE: { zend_arg_info *ret_info = op_array->arg_info - 1; - ZEND_ASSERT((opline + 1)->opcode == ZEND_RETURN || (opline + 1)->opcode == ZEND_RETURN_BY_REF); if (ret_info->class_name || ret_info->type_hint == IS_CALLABLE || !ZEND_SAME_FAKE_TYPE(ret_info->type_hint, Z_TYPE_P(val)) @@ -515,7 +514,10 @@ int zend_optimizer_replace_by_const(zend_op_array *op_array, return 0; } MAKE_NOP(opline); - opline++; + /* zend_handle_loops_and_finally may inserts other oplines */ + do { + ++opline; + } while (opline->opcode != ZEND_RETURN && opline->opcode != ZEND_RETURN_BY_REF); break; } default: diff --git a/ext/opcache/tests/bug73746.phpt b/ext/opcache/tests/bug73746.phpt new file mode 100644 index 0000000000..c97833abcc --- /dev/null +++ b/ext/opcache/tests/bug73746.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #73746 (Method that returns string returns UNKNOWN:0 instead) +--FILE-- +get('CZ')); +?> +--EXPECT-- +string(2) "CZ" -- 2.40.0