]> granicus.if.org Git - php/commitdiff
Dont't use DO_ICALL for internal functions returned by reference
authorDmitry Stogov <dmitry@zend.com>
Thu, 23 Apr 2015 21:34:11 +0000 (00:34 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 23 Apr 2015 21:34:11 +0000 (00:34 +0300)
Zend/zend_compile.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index d48a25f3a904c898f636b241fcadbcee64f727ae..3b3eb7573f48df655217567f1ceb673235fcc7e4 100644 (file)
@@ -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 {
index 899b18a89db07fd010437edd49de3de81843ac22..e16cbd55290f292d61476bbc5b4c1f1a4892ec54 100644 (file)
@@ -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);
 
index 3a2ed291eb95e80c2e7bc74f5737165ef1e5ba31..2802c6015c361e376c968af465b835e45770f43d 100644 (file)
@@ -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);