helly Wed Jul 28 18:53:11 2004 EDT Modified files: /php-src/ext/spl spl_iterators.c Log: - Fix problem when inner constructor isn't called from derived constructor (foound by david) http://cvs.php.net/diff.php/php-src/ext/spl/spl_iterators.c?r1=1.38&r2=1.39&ty=u Index: php-src/ext/spl/spl_iterators.c diff -u php-src/ext/spl/spl_iterators.c:1.38 php-src/ext/spl/spl_iterators.c:1.39 --- php-src/ext/spl/spl_iterators.c:1.38 Mon May 31 04:58:32 2004 +++ php-src/ext/spl/spl_iterators.c Wed Jul 28 18:53:10 2004 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_iterators.c,v 1.38 2004/05/31 08:58:32 zeev Exp $ */ +/* $Id: spl_iterators.c,v 1.39 2004/07/28 22:53:10 helly Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -634,8 +634,16 @@ } } /* }}} */ +static INLINE void spl_dual_it_require(spl_dual_it_object *intern TSRMLS_DC) +{ + if (!intern->inner.iterator) { + php_error_docref(NULL TSRMLS_CC, E_ERROR, "The inner constructor wasn't initialized with an iterator instance"); + } +} + static INLINE void spl_dual_it_free(spl_dual_it_object *intern TSRMLS_DC) { + spl_dual_it_require(intern TSRMLS_CC); if (intern->inner.iterator && intern->inner.iterator->funcs->invalidate_current) { intern->inner.iterator->funcs->invalidate_current(intern->inner.iterator TSRMLS_CC); } @@ -698,6 +706,8 @@ { if (do_free) { spl_dual_it_free(intern TSRMLS_CC); + } else { + spl_dual_it_require(intern TSRMLS_CC); } intern->inner.iterator->funcs->move_forward(intern->inner.iterator TSRMLS_CC); intern->current.pos++;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php