]> granicus.if.org Git - php/commitdiff
- MFH
authorMarcus Boerger <helly@php.net>
Mon, 24 Jan 2005 19:24:46 +0000 (19:24 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 24 Jan 2005 19:24:46 +0000 (19:24 +0000)
Zend/zend_interfaces.c

index 7ab33a58091bfb2eedab52c87f1dbbb8b0799901..9905e258619eb9c6e742edd756b040f705671e34 100755 (executable)
@@ -270,11 +270,17 @@ static zend_object_iterator *zend_user_it_get_new_iterator(zend_class_entry *ce,
        zval *iterator = zend_user_it_new_iterator(ce, object TSRMLS_CC);
        zend_object_iterator *new_iterator;
 
-       zend_class_entry *ce_it = Z_TYPE_P(iterator) == IS_OBJECT ? Z_OBJCE_P(iterator) : NULL;
+       zend_class_entry *ce_it = iterator && Z_TYPE_P(iterator) == IS_OBJECT ? Z_OBJCE_P(iterator) : NULL;
 
        if (!ce || !ce_it || !ce_it->get_iterator || (ce_it->get_iterator == zend_user_it_get_new_iterator && iterator == object)) {
-               zend_error(E_WARNING, "Objects returned by %s::getIterator() must be traversable or implement interface Iterator", ce->name);
-               zval_ptr_dtor(&iterator);
+               if (!EG(exception))
+               {
+                       zend_error(E_WARNING, "Objects returned by %s::getIterator() must be traversable or implement interface Iterator", ce->name);
+               }
+               if (iterator)
+               {
+                       zval_ptr_dtor(&iterator);
+               }
                return NULL;
        }
        new_iterator = ce_it->get_iterator(ce_it, iterator TSRMLS_CC);