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:
@@ -8794,6 +8794,14 @@ jit_SET_EX_OPLINE(jit, opline);
|
|||||||
delayed_call_chain = 1;
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9057,6 +9065,14 @@ static int zend_jit_init_method_call(zend_jit_ctx *jit,
|
|||||||
jit->delayed_call_level = call_level;
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
31
ext/opcache/tests/jit/init_fcall_004.phpt
Normal file
31
ext/opcache/tests/jit/init_fcall_004.phpt
Normal 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
|
||||||
Reference in New Issue
Block a user