Skip to content

Commit 762a774

Browse files
committed
Fixed repeatable opcodes on CALL VM without global registers
1 parent 6904407 commit 762a774

File tree

3 files changed

+7
-9
lines changed

3 files changed

+7
-9
lines changed

Zend/zend_execute.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2224,7 +2224,9 @@ static zend_always_inline zend_generator *zend_get_running_generator(zend_execut
22242224
# define ZEND_VM_REPEATABLE_OPCODE \
22252225
do {
22262226
# define ZEND_VM_REPEAT_OPCODE(_opcode) \
2227-
} while (UNEXPECTED(OPLINE->opcode == _opcode))
2227+
} while (UNEXPECTED((++opline)->opcode == _opcode)); \
2228+
OPLINE = opline; \
2229+
ZEND_VM_CONTINUE()
22282230
# define ZEND_VM_SMART_BRANCH(_result, _check) do { \
22292231
int __result; \
22302232
if (EXPECTED((opline+1)->opcode == ZEND_JMPZ)) { \

Zend/zend_vm_def.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4660,9 +4660,8 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST)
46604660
}
46614661
}
46624662

4663-
ZEND_VM_INC_OPCODE();
46644663
ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
4665-
ZEND_VM_CONTINUE();
4664+
ZEND_VM_NEXT_OPCODE();
46664665
}
46674666

46684667
ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY)
@@ -7719,9 +7718,8 @@ ZEND_VM_C_LABEL(check_indirect):
77197718
ZVAL_REF(variable_ptr, ref);
77207719
}
77217720

7722-
ZEND_VM_INC_OPCODE();
77237721
ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
7724-
ZEND_VM_CONTINUE();
7722+
ZEND_VM_NEXT_OPCODE();
77257723
}
77267724

77277725
ZEND_VM_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY)

Zend/zend_vm_execute.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2254,9 +2254,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(Z
22542254
}
22552255
}
22562256

2257-
ZEND_VM_INC_OPCODE();
22582257
ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT);
2259-
ZEND_VM_CONTINUE();
2258+
ZEND_VM_NEXT_OPCODE();
22602259
}
22612260

22622261
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
@@ -32807,9 +32806,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HAND
3280732806
ZVAL_REF(variable_ptr, ref);
3280832807
}
3280932808

32810-
ZEND_VM_INC_OPCODE();
3281132809
ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL);
32812-
ZEND_VM_CONTINUE();
32810+
ZEND_VM_NEXT_OPCODE();
3281332811
}
3281432812

3281532813
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)

0 commit comments

Comments
 (0)