1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Fix invalid target opline with jit->reuse_ip active (#16457)

This is an alternative for #16440
This commit is contained in:
Dmitry Stogov
2024-10-18 12:48:23 +03:00
committed by GitHub
parent 55266d420b
commit 8b5668efef
2 changed files with 47 additions and 0 deletions

View File

@@ -8794,6 +8794,14 @@ jit_SET_EX_OPLINE(jit, opline);
delayed_call_chain = 1;
}
if (trace
&& trace->op == ZEND_JIT_TRACE_END
&& trace->stop == ZEND_JIT_TRACE_STOP_INTERPRETER) {
if (!zend_jit_set_ip(jit, opline + 1)) {
return 0;
}
}
return 1;
}
@@ -9057,6 +9065,14 @@ static int zend_jit_init_method_call(zend_jit_ctx *jit,
jit->delayed_call_level = call_level;
}
if (trace
&& trace->op == ZEND_JIT_TRACE_END
&& trace->stop == ZEND_JIT_TRACE_STOP_INTERPRETER) {
if (!zend_jit_set_ip(jit, opline + 1)) {
return 0;
}
}
return 1;
}

View File

@@ -0,0 +1,31 @@
--TEST--
JIT INIT_FCALL: 004 Invalid target opline with jit->reuse_ip active
--INI--
opcache.enable=1
opcache.enable_cli=1
--EXTENSIONS--
opcache
--FILE--
<?php
function gen() {
yield 1;
yield 2;
return 3;
};
opcache_jit_blacklist(gen(...));
for ($i = 0; $i < 2; ++$i) {
foreach (gen() as $val) {
var_dump($val);
}
}
?>
DONE
--EXPECT--
int(1)
int(2)
int(1)
int(2)
DONE