com php-src: ZEND_INIT_FCALL_BY_NAME can have non -string literal: ext/opcache/Optimizer/optimize_func_ calls.c
| From: | Nikita Popov | Date: | Fri, 15 Aug 2014 20:55:15 +0000 |
| Subject: | com php-src: ZEND_INIT_FCALL_BY_NAME can have non -string literal: ext/opcache/Optimizer/optimize_func_ calls.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-80859@lists.php.net to get a copy of this message | ||
Commit: f72d6f97ecf976f00abc0dc21b5d1ef4838de60a
Author: Nikita Popov <nikic@php.net> Fri, 15 Aug 2014 22:55:15 +0200
Parents: 9cfbf333b03f1a50394219f9d42871a6564b8ac6
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f72d6f97ecf976f00abc0dc21b5d1ef4838de60a
Log:
ZEND_INIT_FCALL_BY_NAME can have non-string literal
Changed paths:
M ext/opcache/Optimizer/optimize_func_calls.c
Diff:
diff --git a/ext/opcache/Optimizer/optimize_func_calls.c
b/ext/opcache/Optimizer/optimize_func_calls.c
index b93fc36..9e3ed29 100644
--- a/ext/opcache/Optimizer/optimize_func_calls.c
+++ b/ext/opcache/Optimizer/optimize_func_calls.c
@@ -3,6 +3,10 @@
*/
#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
+#define ZEND_OP2_IS_CONST_STRING(opline) \
+ (ZEND_OP2_TYPE(opline) == IS_CONST && \
+ Z_TYPE(op_array->literals[(opline)->op2.constant]) == IS_STRING)
+
typedef struct _optimizer_call_info {
zend_function *func;
zend_op *opline;
@@ -25,7 +29,7 @@ static void optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx
switch (opline->opcode) {
case ZEND_INIT_FCALL_BY_NAME:
case ZEND_INIT_NS_FCALL_BY_NAME:
- if (ZEND_OP2_TYPE(opline) == IS_CONST) {
+ if (ZEND_OP2_IS_CONST_STRING(opline)) {
zend_function *func;
zval *function_name = &op_array->literals[opline->op2.constant + 1];
if ((func = zend_hash_find_ptr(&ctx->script->function_table,
@@ -64,7 +68,7 @@ static void optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx
} else if (opline->extended_value == 0 &&
call_stack[call].opline &&
call_stack[call].opline->opcode == ZEND_INIT_FCALL_BY_NAME &&
- ZEND_OP2_TYPE(call_stack[call].opline) == IS_CONST) {
+ ZEND_OP2_IS_CONST_STRING(call_stack[call].opline)) {
zend_op *fcall = call_stack[call].opline;