helly Tue Apr 27 13:12:11 2004 EDT Modified files: /php-src/ext/spl spl_iterators.c Log: - Some pretection against out-of-memory situations http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.33&r2=1.34&ty=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.33 php-src/ext/spl/spl_iterators.c:1.34 --- php-src/ext/spl/spl_iterators.c:1.33 Tue Apr 27 11:41:26 2004 +++ php-src/ext/spl/spl_iterators.c Tue Apr 27 13:12:11 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_iterators.c,v 1.33 2004/04/27 15:41:26 helly Exp $ */ +/* $Id: spl_iterators.c,v 1.34 2004/04/27 17:12:11 helly Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -230,9 +230,11 @@ ce = object->iterators[object->level].ce; zobject = object->iterators[object->level].zobject; zend_call_method_with_0_params(&zobject, ce, NULL, "getchildren", &child); - ce = Z_OBJCE_P(child); + ce = child ? Z_OBJCE_P(child) : NULL; if (!ce || !instanceof_function(ce, spl_ce_RecursiveIterator TSRMLS_CC)) { - zval_ptr_dtor(&child); + if (child) { + zval_ptr_dtor(&child); + } zend_throw_exception(zend_exception_get_default(), "Objects returned by RecursiveIterator::getChildren() must implement RecursiveIterator", 0 TSRMLS_CC); return; } @@ -610,7 +612,7 @@ static INLINE void spl_dual_it_free(spl_dual_it_object *intern TSRMLS_DC) { - if (intern->inner.iterator->funcs->invalidate_current) { + if (intern->inner.iterator && intern->inner.iterator->funcs->invalidate_current) { intern->inner.iterator->funcs->invalidate_current(intern->inner.iterator TSRMLS_CC); } if (intern->current.data) { @@ -740,11 +742,13 @@ while (spl_dual_it_fetch(intern, 1 TSRMLS_CC) == SUCCESS) { zend_call_method_with_0_params(&zthis, intern->std.ce, NULL, "accept", &retval); - if (zend_is_true(retval)) { + if (retval) { + if (zend_is_true(retval)) { + zval_ptr_dtor(&retval); + return; + } zval_ptr_dtor(&retval); - return; } - zval_ptr_dtor(&retval); intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php