Skip to content

Commit 58801f7

Browse files
committed
Add guard for FETCH_DIM_FUNC_ARG
1 parent 8047c1d commit 58801f7

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,6 +1412,16 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
14121412
case ZEND_QM_ASSIGN:
14131413
ADD_OP1_TRACE_GUARD();
14141414
break;
1415+
case ZEND_FETCH_DIM_FUNC_ARG:
1416+
if (!frame
1417+
|| !frame->call
1418+
|| !frame->call->func
1419+
|| !TRACE_FRAME_IS_LAST_SEND_BY_VAL(frame->call)) {
1420+
break;
1421+
}
1422+
ADD_OP2_TRACE_GUARD();
1423+
ADD_OP1_TRACE_GUARD();
1424+
break;
14151425
case ZEND_PRE_INC:
14161426
case ZEND_PRE_DEC:
14171427
case ZEND_POST_INC:
@@ -1523,6 +1533,19 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin
15231533
return_value_info.type &= ~MAY_BE_GUARD;
15241534
}
15251535
break;
1536+
case ZEND_CHECK_FUNC_ARG:
1537+
if (frame
1538+
&& frame->call
1539+
&& frame->call->func) {
1540+
uint32_t arg_num = opline->op2.num;
1541+
1542+
if (ARG_SHOULD_BE_SENT_BY_REF(frame->call->func, arg_num)) {
1543+
TRACE_FRAME_SET_LAST_SEND_BY_REF(frame->call);
1544+
} else {
1545+
TRACE_FRAME_SET_LAST_SEND_BY_VAL(frame->call);
1546+
}
1547+
}
1548+
break;
15261549
default:
15271550
break;
15281551
}

0 commit comments

Comments
 (0)