summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schlüter <johannes@php.net>2010-07-02 19:17:45 +0000
committerJohannes Schlüter <johannes@php.net>2010-07-02 19:17:45 +0000
commit21d5041c033a4e2b872ec689beb805dc77e9505b (patch)
tree9c399af3b58f729ead4e2be813cc6dd5c0f52c64
parentef22824315adad31f09a5e56c4d8b3b2d418c283 (diff)
downloadphp-git-21d5041c033a4e2b872ec689beb805dc77e9505b.tar.gz
Fix bug #52238: Crash when an Exception occured in iterator_to_array
-rwxr-xr-xext/spl/spl_iterators.c4
-rw-r--r--ext/spl/tests/bug52238.phpt24
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