com php-src: Fixed bug #72684 (AppendIterator segfault with closed generator): ext/spl/spl_iterators.c ext/spl/tests/bug7 2684.phpt

From: 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

« previous php.cvs (#93407) next »