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.3.3RC3~20 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e46fee1d1a3abd94189eb4eb03278e20b607cd49;p=php Fix bug #52238: Crash when an Exception occured in iterator_to_array --- diff --git a/NEWS b/NEWS index 5613e3d397..13cedc6a20 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? Jul 2010, PHP 5.3.3 RC3 +- Fixed bug #52238 (Crash when an Exception occured in iterator_to_array). + (Johannes) 01 Jul 2010, PHP 5.3.3 RC2 - Fixed SplObjectStorage unserialization problems (CVE-2010-2225). (Stas) diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 199adf65fa..5dc2856e71 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -3035,7 +3035,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