diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2018-01-12 21:28:10 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2018-01-12 21:28:24 +0100 |
commit | e112b8474a31ccb0516dfd1d9045c1cf485ecdfe (patch) | |
tree | abb503ef408206afff04e8963752bf1f5e148363 | |
parent | 8c73fc8027a7293e81c0b2e8dc2674fe34f1eb59 (diff) | |
parent | 420d11e8caf8dc76e08984dfed3a4322295a1208 (diff) | |
download | php-git-e112b8474a31ccb0516dfd1d9045c1cf485ecdfe.tar.gz |
Merge branch 'PHP-7.1' into PHP-7.2
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | Zend/tests/generators/bug75396.phpt | 22 | ||||
-rw-r--r-- | Zend/zend_generators.c | 3 |
3 files changed, 26 insertions, 1 deletions
@@ -10,6 +10,8 @@ PHP NEWS . Fixed bug #75786 (segfault when using spread operator on generator passed by reference). (Nikita) . Fixed bug #75799 (arg of get_defined_functions is optional). (carusogabriel) + . Fixed bug #75396 (Exit inside generator finally results in fatal error). + (Nikita) - Opcache: . Fixed bug #75687 (var 8 (TMP) has array key type but not value type). diff --git a/Zend/tests/generators/bug75396.phpt b/Zend/tests/generators/bug75396.phpt new file mode 100644 index 0000000000..6d5abf518f --- /dev/null +++ b/Zend/tests/generators/bug75396.phpt @@ -0,0 +1,22 @@ +--TEST-- +Bug #75396: Exit inside generator finally results in fatal error +--FILE-- +<?php + +$gen = (function () { + yield 42; + + try { + echo "Try\n"; + exit("Exit\n"); + } finally { + echo "Finally\n"; + } +})(); + +$gen->send("x"); + +?> +--EXPECT-- +Try +Exit diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 2b2814426d..2b776249ff 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -185,7 +185,8 @@ static void zend_generator_dtor_storage(zend_object *object) /* {{{ */ generator->node.parent = NULL; } - if (EXPECTED(!ex) || EXPECTED(!(ex->func->op_array.fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK))) { + if (EXPECTED(!ex) || EXPECTED(!(ex->func->op_array.fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK)) + || CG(unclean_shutdown)) { return; } |