diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-05-15 11:03:05 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-05-15 11:04:40 +0200 |
commit | d87b0685b5ec4e5df6d732414653f343bc44af8c (patch) | |
tree | febbde6abad857a7137192b76c021d304ad985b9 | |
parent | 3a3241ced795aef48665c9a2233043da0fcd5a8c (diff) | |
download | php-git-d87b0685b5ec4e5df6d732414653f343bc44af8c.tar.gz |
Fixed bug #79600
Missed unsetting of DO_INIT in one case.
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | Zend/tests/generators/bug79600.phpt | 24 | ||||
-rw-r--r-- | Zend/zend_generators.c | 1 |
3 files changed, 29 insertions, 0 deletions
@@ -6,12 +6,16 @@ PHP NEWS . Fixed bug #79599 (coredump in set_error_handler). (Laruence) . Fixed bug #79566 (Private SHM is not private on Windows). (cmb) . Fixed bug #79489 (.user.ini does not inherit). (cmb) + . Fixed bug #79600 (Regression in 7.4.6 when yielding an array based + generator). (Nikita) - FFI: . Fixed bug #79571 (FFI: var_dumping unions may segfault). (cmb) - Opcache: . Fixed bug #79588 (Boolean opcache settings ignore on/off values). (cmb) + . Fixed bug #79548 (Preloading segfault with inherited method using static + variable). (Nikita) - SimpleXML: . Fixed bug #79528 (Different object of the same xml between 7.4.5 and diff --git a/Zend/tests/generators/bug79600.phpt b/Zend/tests/generators/bug79600.phpt new file mode 100644 index 0000000000..4abe9784b6 --- /dev/null +++ b/Zend/tests/generators/bug79600.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #79600: Regression in 7.4.6 when yielding an array based generator +--FILE-- +<?php + +function createArrayGenerator() { + yield from [ + 1, + 2, + ]; +} + +function createGeneratorFromArrayGenerator() { + yield from createArrayGenerator(); +} + +foreach (createGeneratorFromArrayGenerator() as $value) { + echo $value, "\n"; +} + +?> +--EXPECT-- +1 +2 diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 9d8546f518..4cd9087303 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -792,6 +792,7 @@ try_again: if (UNEXPECTED(!Z_ISUNDEF(generator->values))) { if (EXPECTED(zend_generator_get_next_delegated_value(generator) == SUCCESS)) { + orig_generator->flags &= ~ZEND_GENERATOR_DO_INIT; return; } /* If there are no more deletegated values, resume the generator |