summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_execute.c4
-rw-r--r--Zend/zend_opcode.c15
2 files changed, 12 insertions, 7 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index 7709d4bab0..1e2bbec0b7 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1939,7 +1939,7 @@ int zend_jmpz_ex_handler(ZEND_OPCODE_HANDLER_ARGS)
#if DEBUG_ZEND>=2
printf("Conditional jmp to %d\n", EX(opline)->op2.u.opline_num);
#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
+ EX(opline) = EX(opline)->op2.u.jmp_addr;
return 0; /* CHECK_ME */
}
NEXT_OPCODE();
@@ -1957,7 +1957,7 @@ int zend_jmpnz_ex_handler(ZEND_OPCODE_HANDLER_ARGS)
#if DEBUG_ZEND>=2
printf("Conditional jmp to %d\n", EX(opline)->op2.u.opline_num);
#endif
- EX(opline) = &op_array->opcodes[EX(opline)->op2.u.opline_num];
+ EX(opline) = EX(opline)->op2.u.jmp_addr;
return 0; /* CHECK_ME */
}
NEXT_OPCODE();
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index fb7b8b2787..5feb705996 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -309,11 +309,16 @@ int pass_two(zend_op_array *op_array TSRMLS_DC)
opline->op2.u.constant.is_ref = 1;
opline->op2.u.constant.refcount = 2;
}
- if (opline->opcode == ZEND_JMP) {
- opline->op1.u.jmp_addr = &op_array->opcodes[opline->op1.u.opline_num];
- }
- if (opline->opcode == ZEND_JMPZ || opline->opcode == ZEND_JMPNZ) {
- opline->op2.u.jmp_addr = &op_array->opcodes[opline->op2.u.opline_num];
+ switch (opline->opcode) {
+ case ZEND_JMP:
+ opline->op1.u.jmp_addr = &op_array->opcodes[opline->op1.u.opline_num];
+ break;
+ case ZEND_JMPZ:
+ case ZEND_JMPNZ:
+ case ZEND_JMPZ_EX:
+ case ZEND_JMPNZ_EX:
+ opline->op2.u.jmp_addr = &op_array->opcodes[opline->op2.u.opline_num];
+ break;
}
opline->handler = zend_opcode_handlers[opline->opcode];
opline++;