]> granicus.if.org Git - php/commitdiff
Only backup vm_stack* if generator->stack has not been freed
authorBob Weinand <bobwei9@hotmail.com>
Mon, 12 Jan 2015 21:30:38 +0000 (22:30 +0100)
committerBob Weinand <bobwei9@hotmail.com>
Mon, 12 Jan 2015 21:31:07 +0000 (22:31 +0100)
Zend/zend_generators.c

index 95a4eb74fd8d351718cd753c5b294574b999c26c..3185b790794ec07de2d05966e6f638b189658f65 100644 (file)
@@ -322,13 +322,14 @@ ZEND_API void zend_generator_resume(zend_generator *generator) /* {{{ */
                zend_execute_ex(generator->execute_data);
                generator->flags &= ~ZEND_GENERATOR_CURRENTLY_RUNNING;
 
-               /* Unlink generator call_frame from the caller */
+               /* Unlink generator call_frame from the caller and backup vm_stack_top */
                if (generator->execute_data) {
+                       generator->stack = EG(vm_stack);
+                       generator->stack->top = EG(vm_stack_top);
                        generator->execute_data->prev_execute_data = NULL;
                }
 
                /* Restore executor globals */
-               generator->stack->top = EG(vm_stack_top);
                EG(current_execute_data) = original_execute_data;
                EG(scope) = original_scope;
                EG(vm_stack_top) = original_stack->top;