Skip to content

Commit 5948a66

Browse files
committed
Prevent negative array index access
1 parent 145aba5 commit 5948a66

File tree

1 file changed

+10
-3
lines changed

1 file changed

+10
-3
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4020,8 +4020,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
40204020
op2_info = OP2_INFO();
40214021
CHECK_OP2_TRACE_TYPE();
40224022
res_info = RES_INFO();
4023+
avoid_refcounting =
4024+
ssa_op->op1_use >= 0 &&
4025+
ssa->var_info[ssa_op->op1_use].avoid_refcounting;
40234026
if (!zend_jit_fetch_dim_read(&dasm_state, opline, ssa, ssa_op,
4024-
op1_info, op1_addr, ssa->var_info[ssa_op->op1_use].avoid_refcounting,
4027+
op1_info, op1_addr, avoid_refcounting,
40254028
op2_info, res_info, RES_REG_ADDR(),
40264029
(
40274030
(op1_info & MAY_BE_ANY) != MAY_BE_ARRAY ||
@@ -4063,7 +4066,8 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
40634066
if (ra) {
40644067
zend_jit_trace_clenup_stack(stack, opline, ssa_op, ssa, ra);
40654068
}
4066-
if (ssa->var_info[ssa_op->op1_use].avoid_refcounting) {
4069+
if (ssa_op->op1_use >= 0
4070+
&& ssa->var_info[ssa_op->op1_use].avoid_refcounting) {
40674071
/* Temporary reset ZREG_ZVAL_TRY_ADDREF */
40684072
zend_jit_trace_stack *stack = JIT_G(current_frame)->stack;
40694073
uint32_t old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var));
@@ -4083,8 +4087,11 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par
40834087
smart_branch_opcode = 0;
40844088
exit_addr = NULL;
40854089
}
4090+
avoid_refcounting =
4091+
ssa_op->op1_use >= 0 &&
4092+
ssa->var_info[ssa_op->op1_use].avoid_refcounting;
40864093
if (!zend_jit_isset_isempty_dim(&dasm_state, opline,
4087-
op1_info, op1_addr, ssa->var_info[ssa_op->op1_use].avoid_refcounting,
4094+
op1_info, op1_addr, avoid_refcounting,
40884095
op2_info,
40894096
zend_may_throw_ex(opline, ssa_op, op_array, ssa, op1_info, op2_info),
40904097
smart_branch_opcode, -1, -1,

0 commit comments

Comments
 (0)