diff options
author | Bob Weinand <bobwei9@hotmail.com> | 2016-07-23 16:39:21 +0200 |
---|---|---|
committer | Bob Weinand <bobwei9@hotmail.com> | 2016-07-23 16:39:21 +0200 |
commit | 6046acf93e4f9de43efb12d53dd58738959fb20e (patch) | |
tree | 3fc145581915440025babbe76e6221ad92a4b545 /Zend/zend_generators.c | |
parent | f12fd5c2d323ad4f76bea50fc2adecc3db0cae59 (diff) | |
download | php-git-6046acf93e4f9de43efb12d53dd58738959fb20e.tar.gz |
Fix ClosedGeneratorException possibly thrown into wrong scope
Diffstat (limited to 'Zend/zend_generators.c')
-rw-r--r-- | Zend/zend_generators.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 89b919a48c..f1cc09e938 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -521,6 +521,16 @@ ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator zend_throw_exception(zend_ce_ClosedGeneratorException, "Generator yielded from aborted, no return value available", 0); EG(current_execute_data) = original_execute_data; + + if (!((old_root ? old_root : generator)->flags & ZEND_GENERATOR_CURRENTLY_RUNNING)) { + leaf->node.ptr.root = root; + root->node.parent = NULL; + if (old_root) { + OBJ_RELEASE(&old_root->std); + } + zend_generator_resume(leaf); + return leaf->node.ptr.root; /* this may be updated during zend_generator_resume! */ + } } else { zval_ptr_dtor(&root->value); ZVAL_COPY(&root->value, &root->node.parent->value); |