]> granicus.if.org Git - php/commitdiff
Fixed crash
authorDmitry Stogov <dmitry@zend.com>
Wed, 3 Apr 2019 19:46:49 +0000 (22:46 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 3 Apr 2019 19:46:49 +0000 (22:46 +0300)
ext/opcache/jit/zend_jit.c

index 5a8a014e4703a69b86b086b6336a68fb84b98ea6..fffab897c25e79aca45320b1dfc59a617d0c39db 100644 (file)
@@ -2097,11 +2097,11 @@ static int zend_jit(zend_op_array *op_array, zend_ssa *ssa, const zend_op *rt_op
 
                zend_jit_label(&dasm_state, b);
                if (zend_jit_level < ZEND_JIT_LEVEL_INLINE) {
-                       opline = op_array->opcodes + (ssa->cfg.blocks[b].start - 1);
                        if ((ssa->cfg.blocks[b].flags & ZEND_BB_FOLLOW)
-                         && (opline->opcode == ZEND_NOP
-                          || opline->opcode == ZEND_SWITCH_LONG
-                          || opline->opcode == ZEND_SWITCH_STRING)) {
+                         && ssa->cfg.blocks[b].start != 0
+                         && (op_array->opcodes[ssa->cfg.blocks[b].start - 1].opcode == ZEND_NOP
+                          || op_array->opcodes[ssa->cfg.blocks[b].start - 1].opcode == ZEND_SWITCH_LONG
+                          || op_array->opcodes[ssa->cfg.blocks[b].start - 1].opcode == ZEND_SWITCH_STRING)) {
                                if (!zend_jit_reset_opline(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start)
                                 || !zend_jit_set_valid_ip(&dasm_state, op_array->opcodes + ssa->cfg.blocks[b].start)) {
                                        goto jit_failure;