cvs: php-src(PHP_5_2) / NEWS /ext/spl spl_iterators.c /ext/spl/tests bug37457.phpt

From: Date: Tue, 16 May 2006 08:21:08 +0000
Subject: cvs: php-src(PHP_5_2) / NEWS /ext/spl spl_iterators.c /ext/spl/tests bug37457.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-38228@lists.php.net to get a copy of this message
helly Tue May 16 08:21:08 2006 UTC Added files: (Branch: PHP_5_2) /php-src/ext/spl/tests bug37457.phpt Modified files: /php-src NEWS /php-src/ext/spl spl_iterators.c Log: - MFH Fixed Bug #37457 (Crash when an exception is thrown in accept() method of FilterIterator) http://cvs.php.net/viewcvs.cgi/php-src/NEWS?r1=1.2027.2.547.2.27&r2=1.2027.2.547.2.28&diff_format=u Index: php-src/NEWS diff -u php-src/NEWS:1.2027.2.547.2.27 php-src/NEWS:1.2027.2.547.2.28 --- php-src/NEWS:1.2027.2.547.2.27 Tue May 16 00:39:32 2006 +++ php-src/NEWS Tue May 16 08:21:07 2006 @@ -38,6 +38,8 @@ - Added pg_field_table() function. (Edin) - Added implementation of curl_multi_info_read(). (Brian) - Added RFC2397 (data: stream) support. (Marcus) +- Fixed Bug #37457 (Crash when an exception is thrown in accept() method of + FilterIterator). (Marcus) - Fixed bug #37416 (iterator_to_array() hides exceptions thrown in rewind() method). (Tony) - Fixed bug #37413 (Rejected versions of flex that don't work). (Ilia) http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.4&r2=1.73.2.30.2.5&diff_format=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.4 php-src/ext/spl/spl_iterators.c:1.73.2.30.2.5 --- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.4 Fri May 12 09:42:56 2006 +++ php-src/ext/spl/spl_iterators.c Tue May 16 08:21:07 2006 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_iterators.c,v 1.73.2.30.2.4 2006/05/12 09:42:56 tony2001 Exp $ */ +/* $Id: spl_iterators.c,v 1.73.2.30.2.5 2006/05/16 08:21:07 helly Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -1173,7 +1173,9 @@ } zval_ptr_dtor(&retval); } - + if (EG(exception)) { + return; + } intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC); } spl_dual_it_free(intern TSRMLS_CC); @@ -1653,11 +1655,14 @@ zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval); if (zend_is_true(retval)) { zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &zchildren); - if (EG(exception) && intern->u.caching.flags & CIT_CATCH_GET_CHILD) { - zend_clear_exception(TSRMLS_C); + if (EG(exception)) { if (zchildren) { zval_ptr_dtor(&zchildren); } + if (intern->u.caching.flags & CIT_CATCH_GET_CHILD) { + zend_clear_exception(TSRMLS_C); + } + return; } else { INIT_PZVAL(&zflags); ZVAL_LONG(&zflags, intern->u.caching.flags & CIT_PUBLIC); http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/tests/bug37457.phpt?view=markup&rev=1.1 Index: php-src/ext/spl/tests/bug37457.phpt +++ php-src/ext/spl/tests/bug37457.phpt --TEST-- Bug #37457 (Crash when an exception is thrown in accept() method of FilterIterator) --FILE-- <?php class Collection implements Iterator { protected $array, $valid = false; public function __construct(array $a) { echo __METHOD__ . "\n"; $this->array = $a; } public function current() { echo __METHOD__ . "\n"; return current($this->array); } public function key() { echo __METHOD__ . "\n"; return key($this->array); } public function next() { echo __METHOD__ . "\n"; $this->valid = (false !== next($this->array)); } public function valid() { echo __METHOD__ . "\n"; return $this->valid; } public function rewind() { echo __METHOD__ . "\n"; $this->valid = (false !== reset($this->array)); } } class TestFilter extends FilterIterator { public function accept() { echo __METHOD__ . "\n"; throw new Exception("Failure in Accept"); } } $test = new TestFilter(new Collection(array(0))); try { foreach ($test as $item) { echo $item; } } catch (Exception $e) { var_dump($e->getMessage()); } ?> ===DONE=== --EXPECTF-- Collection::__construct Collection::rewind Collection::valid Collection::current Collection::key TestFilter::accept string(17) "Failure in Accept" ===DONE===

« previous php.cvs (#38228) next »