Skip to content

Commit aeb8524

Browse files
committed
Merge branch 'PHP-8.5'
* PHP-8.5: Fix segfault in Tracing JIT with object reference (GH-20818)
2 parents 724ff60 + 2352cc1 commit aeb8524

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

ext/opcache/jit/zend_jit_ir.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17199,6 +17199,7 @@ static int zend_jit_trace_handler(zend_jit_ctx *jit, const zend_op_array *op_arr
1719917199
SET_STACK_TYPE(stack, EX_VAR_TO_NUM(opline->op2.var), IS_UNKNOWN, 1);
1720017200
}
1720117201
break;
17202+
case ZEND_FE_RESET_RW:
1720217203
case ZEND_BIND_INIT_STATIC_OR_JMP:
1720317204
if (opline->op1_type == IS_CV) {
1720417205
old_info = STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var));
@@ -17223,6 +17224,7 @@ static int zend_jit_trace_handler(zend_jit_ctx *jit, const zend_op_array *op_arr
1722317224
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op2.var), old_info);
1722417225
}
1722517226
break;
17227+
case ZEND_FE_RESET_RW:
1722617228
case ZEND_BIND_INIT_STATIC_OR_JMP:
1722717229
if (opline->op1_type == IS_CV) {
1722817230
SET_STACK_INFO(stack, EX_VAR_TO_NUM(opline->op1.var), old_info);

ext/opcache/tests/jit/gh20818.phpt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
--TEST--
2+
GH-20818 (Segfault in Tracing JIT with Object Reference)
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.jit=tracing
7+
opcache.jit_buffer_size=1M
8+
--FILE--
9+
<?php
10+
11+
function process($data) {
12+
foreach ($data as &$v) {}
13+
}
14+
15+
$data = [
16+
(object) ["" => 1],
17+
(object) ["" => 1],
18+
(object) [],
19+
];
20+
21+
for ($i = 0; $i < 200; $i += 1) {
22+
foreach ($data as $entry) {
23+
process($entry);
24+
}
25+
}
26+
27+
echo "Done\n";
28+
?>
29+
--EXPECT--
30+
Done

0 commit comments

Comments
 (0)