From: Johannes Schlüter Date: Fri, 2 Jul 2010 19:17:45 +0000 (+0000) Subject: Fix bug #52238: Crash when an Exception occured in iterator_to_array X-Git-Tag: php-5.4.0alpha1~191^2~1217 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=21d5041c033a4e2b872ec689beb805dc77e9505b;p=php Fix bug #52238: Crash when an Exception occured in iterator_to_array --- 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-- +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