From eb54f96a0b04818b0f3290ee9ced0439da1eec63 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Mon, 24 Jan 2005 19:24:46 +0000 Subject: [PATCH] - MFH --- Zend/zend_interfaces.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index 7ab33a5809..9905e25861 100755 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -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); -- 2.50.1