com php-src: Fixed bug #72684 (AppendIterator segfault with closed generator): ext/spl/spl_iterators.c ext/spl/tests/bug7 2684.phpt
| From: | Pierrick Charron | Date: | Wed, 27 Jul 2016 00:34:16 +0000 |
| Subject: | com php-src: Fixed bug #72684 (AppendIterator segfault with closed generator): ext/spl/spl_iterators.c ext/spl/tests/bug7 2684.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-93407@lists.php.net to get a copy of this message | ||
Commit: 4c2e1a13be27b0c44ac5c33a6c548a3d5e5faf8c
Author: Pierrick Charron <pierrick@php.net> Tue, 26 Jul 2016 20:34:16 -0400
Parents: 24d8f6ed7c583c82d6ed63080d235474f8afec6a
Branches: PHP-5.6 PHP-7.0 PHP-7.1 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=4c2e1a13be27b0c44ac5c33a6c548a3d5e5faf8c
Log:
Fixed bug #72684 (AppendIterator segfault with closed generator)
Bugs:
https://bugs.php.net/72684
Changed paths:
M ext/spl/spl_iterators.c
A ext/spl/tests/bug72684.phpt
Diff:
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c
index a5a17d8..a023b11 100644
--- a/ext/spl/spl_iterators.c
+++ b/ext/spl/spl_iterators.c
@@ -1688,7 +1688,7 @@ static inline void spl_dual_it_rewind(spl_dual_it_object *intern TSRMLS_DC)
{
spl_dual_it_free(intern TSRMLS_CC);
intern->current.pos = 0;
- if (intern->inner.iterator->funcs->rewind) {
+ if (intern->inner.iterator && intern->inner.iterator->funcs->rewind) {
intern->inner.iterator->funcs->rewind(intern->inner.iterator TSRMLS_CC);
}
}
diff --git a/ext/spl/tests/bug72684.phpt b/ext/spl/tests/bug72684.phpt
new file mode 100644
index 0000000..7a99901
--- /dev/null
+++ b/ext/spl/tests/bug72684.phpt
@@ -0,0 +1,21 @@
+--TEST--
+Bug #72684 (AppendIterator segfault with closed generator)
+--FILE--
+<?php
+
+function createGenerator() { yield 1; }
+$generator = createGenerator();
+
+$appendIterator = new AppendIterator();
+$appendIterator->append($generator);
+
+iterator_to_array($appendIterator);
+try {
+ iterator_to_array($appendIterator);
+} catch (\Exception $e) {
+ echo $e->getMessage();
+}
+
+?>
+--EXPECT--
+Cannot traverse an already closed generator