(Bob)
. Fixed bug #71273 (A wrong ext directory setup in php.ini leads to crash).
(Anatol)
+ . Fixed bug #71297 (Memory leak with consecutive yield from). (Bob)
- CURL:
. Fixed bug #71225 (curl_setopt() fails to set CURLOPT_POSTFIELDS with
--- /dev/null
+--TEST--
+Bug #71297 (Memory leak with consecutive yield from)
+--FILE--
+<?php
+
+function foo() {
+ yield array_fill(0, 10000, 4);
+}
+
+function genLeak() {
+ $i = 0;
+ while (1) {
+ yield from foo();
+ print $i++;
+ }
+}
+
+$x = 0;
+foreach (genLeak() as $i) {
+ if ($x++ == 3) break;
+}
+
+?>
+--EXPECT--
+012
if (EXPECTED(EG(exception) == NULL)) {
zend_op *yield_from = (zend_op *) root->execute_data->opline - 1;
- if (yield_from->opcode == ZEND_YIELD_FROM && !(yield_from->result_type & EXT_TYPE_UNUSED)) {
+ if (yield_from->opcode == ZEND_YIELD_FROM) {
if (Z_ISUNDEF(root->node.parent->retval)) {
/* Throw the exception in the context of the generator */
zend_execute_data *original_execute_data = EG(current_execute_data);
EG(current_execute_data) = original_execute_data;
} else {
+ zval_dtor(&root->value);
ZVAL_COPY(&root->value, &root->node.parent->value);
ZVAL_COPY(ZEND_CALL_VAR(root->execute_data, yield_from->result.var), &root->node.parent->retval);
}