Fix bug #52238: Crash when an Exception occured in iterator_to_array

This commit is contained in:
Johannes Schlüter 2010-07-02 19:17:45 +00:00
parent ef22824315
commit 21d5041c03
2 changed files with 27 additions and 1 deletions

View File

@ -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;
}
/* }}} */

View File

@ -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