diff options
author | Pierrick Charron <pierrick@php.net> | 2016-07-26 20:36:34 -0400 |
---|---|---|
committer | Pierrick Charron <pierrick@php.net> | 2016-07-26 20:36:34 -0400 |
commit | 2597f5d66552051994ed55655107d9c5142f7d34 (patch) | |
tree | 28f6656fa1cdea3c2bc0beca555d3bd021f4500c | |
parent | 31ed322b0699e188f418a74adeec4c7e4ddd0bae (diff) | |
parent | 4c2e1a13be27b0c44ac5c33a6c548a3d5e5faf8c (diff) | |
download | php-git-2597f5d66552051994ed55655107d9c5142f7d34.tar.gz |
Merge branch 'PHP-5.6' into PHP-7.0
Conflicts:
ext/spl/spl_iterators.c
-rw-r--r-- | ext/spl/spl_iterators.c | 2 | ||||
-rw-r--r-- | ext/spl/tests/bug72684.phpt | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 6a0049733f..0977228faa 100644 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -1679,7 +1679,7 @@ static inline void spl_dual_it_rewind(spl_dual_it_object *intern) { spl_dual_it_free(intern); 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); } } diff --git a/ext/spl/tests/bug72684.phpt b/ext/spl/tests/bug72684.phpt new file mode 100644 index 0000000000..7a99901f53 --- /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 |