diff options
author | Johannes Schlüter <johannes@php.net> | 2010-07-02 19:17:45 +0000 |
---|---|---|
committer | Johannes Schlüter <johannes@php.net> | 2010-07-02 19:17:45 +0000 |
commit | 21d5041c033a4e2b872ec689beb805dc77e9505b (patch) | |
tree | 9c399af3b58f729ead4e2be813cc6dd5c0f52c64 | |
parent | ef22824315adad31f09a5e56c4d8b3b2d418c283 (diff) | |
download | php-git-21d5041c033a4e2b872ec689beb805dc77e9505b.tar.gz |
Fix bug #52238: Crash when an Exception occured in iterator_to_array
-rwxr-xr-x | ext/spl/spl_iterators.c | 4 | ||||
-rw-r--r-- | ext/spl/tests/bug52238.phpt | 24 |
2 files changed, 27 insertions, 1 deletions
diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index c8d0e64461..95188b73d6 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -3033,7 +3033,9 @@ PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, v } done: - iter->funcs->dtor(iter TSRMLS_CC); + if (iter) { + iter->funcs->dtor(iter TSRMLS_CC); + } return EG(exception) ? FAILURE : SUCCESS; } /* }}} */ diff --git a/ext/spl/tests/bug52238.phpt b/ext/spl/tests/bug52238.phpt new file mode 100644 index 0000000000..85410bdf1e --- /dev/null +++ b/ext/spl/tests/bug52238.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #52238 - Crash when an Exception occured in iterator_to_array +--FILE-- +<?php +class Foo implements IteratorAggregate +{ + public function bar() { + throw new Exception; + } + + public function getIterator() { + return new ArrayIterator($this->bar()); + } +} +var_dump(iterator_to_array(new Foo)); +?> +--EXPECTF-- +Fatal error: Uncaught exception 'Exception' in %s +Stack trace: +#0 %s: Foo->bar() +#1 [internal function]: Foo->getIterator() +#2 %s: iterator_to_array(Object(Foo)) +#3 {main} + thrown in %s on line %d |