summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/tests/generators/send_after_close.phpt14
-rw-r--r--Zend/zend_generators.c5
2 files changed, 19 insertions, 0 deletions
diff --git a/Zend/tests/generators/send_after_close.phpt b/Zend/tests/generators/send_after_close.phpt
new file mode 100644
index 0000000000..6a251b2481
--- /dev/null
+++ b/Zend/tests/generators/send_after_close.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Calls to send() after close should do nothing
+--FILE--
+<?php
+
+function *gen() { }
+
+$gen = gen();
+$gen->send("Test");
+
+?>
+===DONE===
+--EXPECT--
+===DONE===
diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c
index 01c9aa3198..0cf600a922 100644
--- a/Zend/zend_generators.c
+++ b/Zend/zend_generators.c
@@ -308,6 +308,11 @@ ZEND_METHOD(Generator, send)
zend_generator_ensure_initialized(object, generator TSRMLS_CC);
+ /* The generator is already closed, thus can't send anything */
+ if (!generator->execute_data) {
+ return;
+ }
+
/* The sent value was initialized to NULL, so dtor that */
zval_ptr_dtor(generator->send_target->var.ptr_ptr);