mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
commit
57f408e87c
2 changed files with 43 additions and 0 deletions
42
Zend/tests/bug79657.phpt
Normal file
42
Zend/tests/bug79657.phpt
Normal file
|
@ -0,0 +1,42 @@
|
|||
--TEST--
|
||||
Bug #79657: "yield from" hangs when invalid value encountered
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function throwException(): iterable
|
||||
{
|
||||
throw new Exception();
|
||||
}
|
||||
|
||||
function loop(): iterable
|
||||
{
|
||||
$callbacks = [
|
||||
function () {
|
||||
yield 'first';
|
||||
},
|
||||
function () {
|
||||
yield from throwException();
|
||||
}
|
||||
];
|
||||
|
||||
foreach ($callbacks as $callback) {
|
||||
yield from $callback();
|
||||
}
|
||||
}
|
||||
|
||||
function get(string $first, int $second): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
get(...loop());
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught Exception in %s:%d
|
||||
Stack trace:
|
||||
#0 %s(%d): throwException()
|
||||
#1 %s(%d): {closure}()
|
||||
#2 %s(%d): loop()
|
||||
#3 {main}
|
||||
thrown in %s on line %d
|
|
@ -794,6 +794,7 @@ try_again:
|
|||
} else {
|
||||
generator = zend_generator_get_current(orig_generator);
|
||||
zend_generator_throw_exception(generator, NULL);
|
||||
orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT;
|
||||
goto try_again;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue