7f18ac
From d87b0685b5ec4e5df6d732414653f343bc44af8c Mon Sep 17 00:00:00 2001
7f18ac
From: Nikita Popov <nikita.ppv@gmail.com>
7f18ac
Date: Fri, 15 May 2020 11:03:05 +0200
7f18ac
Subject: [PATCH] Fixed bug #79600
7f18ac
7f18ac
Missed unsetting of DO_INIT in one case.
7f18ac
---
7f18ac
 NEWS                                |  4 ++++
7f18ac
 Zend/tests/generators/bug79600.phpt | 24 ++++++++++++++++++++++++
7f18ac
 Zend/zend_generators.c              |  1 +
7f18ac
 3 files changed, 29 insertions(+)
7f18ac
 create mode 100644 Zend/tests/generators/bug79600.phpt
7f18ac
7f18ac
diff --git a/Zend/tests/generators/bug79600.phpt b/Zend/tests/generators/bug79600.phpt
7f18ac
new file mode 100644
7f18ac
index 000000000000..4abe9784b694
7f18ac
--- /dev/null
7f18ac
+++ b/Zend/tests/generators/bug79600.phpt
7f18ac
@@ -0,0 +1,24 @@
7f18ac
+--TEST--
7f18ac
+Bug #79600: Regression in 7.4.6 when yielding an array based generator
7f18ac
+--FILE--
7f18ac
+
7f18ac
+
7f18ac
+function createArrayGenerator() {
7f18ac
+    yield from [
7f18ac
+        1,
7f18ac
+        2,
7f18ac
+    ];
7f18ac
+}
7f18ac
+
7f18ac
+function createGeneratorFromArrayGenerator() {
7f18ac
+    yield from createArrayGenerator();
7f18ac
+}
7f18ac
+
7f18ac
+foreach (createGeneratorFromArrayGenerator() as $value) {
7f18ac
+    echo $value, "\n";
7f18ac
+}
7f18ac
+
7f18ac
+?>
7f18ac
+--EXPECT--
7f18ac
+1
7f18ac
+2
7f18ac
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
7f18ac
index 9d8546f5185b..4cd9087303a3 100644
7f18ac
--- a/Zend/zend_generators.c
7f18ac
+++ b/Zend/zend_generators.c
7f18ac
@@ -792,6 +792,7 @@ ZEND_API void zend_generator_resume(zend_generator *orig_generator) /* {{{ */
7f18ac
 
7f18ac
 	if (UNEXPECTED(!Z_ISUNDEF(generator->values))) {
7f18ac
 		if (EXPECTED(zend_generator_get_next_delegated_value(generator) == SUCCESS)) {
7f18ac
+			orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT;
7f18ac
 			return;
7f18ac
 		}
7f18ac
 		/* If there are no more deletegated values, resume the generator