From: Dmitry Stogov Date: Wed, 29 Apr 2015 11:20:44 +0000 (+0300) Subject: Fixed repeatable opcodes on CALL VM without global registers X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~117 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=762a774c401a547696c536b76468d0068143d8c4;p=php Fixed repeatable opcodes on CALL VM without global registers --- diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index e37eaa14df..648b80c069 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -2224,7 +2224,9 @@ static zend_always_inline zend_generator *zend_get_running_generator(zend_execut # define ZEND_VM_REPEATABLE_OPCODE \ do { # define ZEND_VM_REPEAT_OPCODE(_opcode) \ - } while (UNEXPECTED(OPLINE->opcode == _opcode)) + } while (UNEXPECTED((++opline)->opcode == _opcode)); \ + OPLINE = opline; \ + ZEND_VM_CONTINUE() # define ZEND_VM_SMART_BRANCH(_result, _check) do { \ int __result; \ if (EXPECTED((opline+1)->opcode == ZEND_JMPZ)) { \ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 5f26e92380..900dc333fc 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -4660,9 +4660,8 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST) } } - ZEND_VM_INC_OPCODE(); ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT); - ZEND_VM_CONTINUE(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY) @@ -7719,9 +7718,8 @@ ZEND_VM_C_LABEL(check_indirect): ZVAL_REF(variable_ptr, ref); } - ZEND_VM_INC_OPCODE(); ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL); - ZEND_VM_CONTINUE(); + ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY) diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 14a97a48fc..a5982f39d0 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2254,9 +2254,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(Z } } - ZEND_VM_INC_OPCODE(); ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT); - ZEND_VM_CONTINUE(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) @@ -32807,9 +32806,8 @@ check_indirect: ZVAL_REF(variable_ptr, ref); } - ZEND_VM_INC_OPCODE(); ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL); - ZEND_VM_CONTINUE(); + ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)