From: Dmitry Stogov Date: Thu, 23 Apr 2015 21:34:11 +0000 (+0300) Subject: Dont't use DO_ICALL for internal functions returned by reference X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~172 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=000d5d7ec9f5aaf78fbf34162b888892731bf7dd;p=php Dont't use DO_ICALL for internal functions returned by reference --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d48a25f3a9..3b3eb7573f 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -2708,7 +2708,7 @@ ZEND_API zend_uchar zend_get_call_op(zend_uchar init_op, zend_function *fbc) /* if (fbc->type == ZEND_INTERNAL_FUNCTION) { if (!zend_execute_internal && !fbc->common.scope && - !(fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED|ZEND_ACC_HAS_TYPE_HINTS))) { + !(fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED|ZEND_ACC_HAS_TYPE_HINTS|ZEND_ACC_RETURN_REFERENCE))) { return ZEND_DO_ICALL; } } else { diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 899b18a89d..e16cbd5529 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -3396,7 +3396,7 @@ ZEND_VM_HANDLER(129, ZEND_DO_ICALL, ANY, ANY) ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); - Z_VAR_FLAGS_P(ret) = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0 ? IS_VAR_RET_REF : 0; + Z_VAR_FLAGS_P(ret) = 0; fbc->internal_function.handler(call, ret); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 3a2ed291eb..2802c6015c 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -553,7 +553,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_HANDLER(ZEND_OPC ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); - Z_VAR_FLAGS_P(ret) = (fbc->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0 ? IS_VAR_RET_REF : 0; + Z_VAR_FLAGS_P(ret) = 0; fbc->internal_function.handler(call, ret);