Commit:    12e928314fb270db31adc361ac4993b4f0fe000a
Author:    Nikita Popov <ni...@php.net>         Tue, 29 May 2012 18:01:08 +0200
Parents:   ad525c288ad83df497ed1a0668915cad61d72e26
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=12e928314fb270db31adc361ac4993b4f0fe000a

Log:
Fix segfault when send()ing to a closed generator

Changed paths:
  A  Zend/tests/generators/send_after_close.phpt
  M  Zend/zend_generators.c


Diff:
diff --git a/Zend/tests/generators/send_after_close.phpt 
b/Zend/tests/generators/send_after_close.phpt
new file mode 100644
index 0000000..6a251b2
--- /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 01c9aa3..0cf600a 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);


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to