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

Reply via email to