]> granicus.if.org Git - php/commitdiff
Fixed repeatable opcodes on CALL VM without global registers
authorDmitry Stogov <dmitry@zend.com>
Wed, 29 Apr 2015 11:20:44 +0000 (14:20 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 29 Apr 2015 11:20:44 +0000 (14:20 +0300)
Zend/zend_execute.c
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index e37eaa14df1151119fc9d1cc05aac51249579b02..648b80c069401cf6d887451cad8128c3215a6f04 100644 (file)
@@ -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)) { \
index 5f26e9238012a3d274083a836f68a13c93791226..900dc333fce94c8b678dd7e8c828a44121b2da53 100644 (file)
@@ -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)
index 14a97a48fc8d2694fc2adab73db791bf1ef811d3..a5982f39d04d822e92084f4bfb5c6150f7b1fa90 100644 (file)
@@ -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)