diff --git a/NEWS b/NEWS index 1cec854b092..90e051c2c92 100644 --- a/NEWS +++ b/NEWS @@ -13,6 +13,8 @@ PHP NEWS fault). (Christoph M. Becker) . Fixed bug #69781 (phpinfo() reports Professional Editions of Windows 7/8/8.1/10 as "Business"). (Christian Wenz) + . Fixed bug #69740 (finally in generator (yield) swallows exception in + iteration). (Nikita) - PDO_pgsql: . Fixed bug #69752 (PDOStatement::execute() leaks memory with DML diff --git a/Zend/tests/bug69740.phpt b/Zend/tests/bug69740.phpt new file mode 100644 index 00000000000..30a2a490990 --- /dev/null +++ b/Zend/tests/bug69740.phpt @@ -0,0 +1,28 @@ +--TEST-- +Bug #69740: finally in generator (yield) swallows exception in iteration +--FILE-- + +--EXPECTF-- +1 +finally + +Fatal error: Uncaught exception 'Exception' in %s:%d +Stack trace: +#0 {main} + thrown in %s on line %d diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 4b18f4221dc..1cf9566ea55 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -198,6 +198,9 @@ static void zend_generator_dtor_storage(zend_generator *generator, zend_object_h if (finally_op_num) { ex->opline = &ex->op_array->opcodes[finally_op_num]; ex->fast_ret = NULL; + ex->delayed_exception = EG(exception); + EG(exception) = NULL; + generator->flags |= ZEND_GENERATOR_FORCED_CLOSE; zend_generator_resume(generator TSRMLS_CC); }