From 0d1e43711ad6d0ef789022bf8bb95654177cdd12 Mon Sep 17 00:00:00 2001 From: Marcus Boerger Date: Sun, 6 Mar 2005 22:57:05 +0000 Subject: [PATCH] - Fix problem with exceptions in hasChildren calls --- ext/spl/spl_iterators.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 63294d559f..62964b02bf 100755 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -166,6 +166,7 @@ static void spl_recursive_it_move_forward_ex(spl_recursive_it_object *object, zv zend_class_entry *ce; zval *retval, *child; zend_object_iterator *sub_iter; + int has_children; while (1) { next_step: @@ -183,9 +184,11 @@ next_step: ce = object->iterators[object->level].ce; zobject = object->iterators[object->level].zobject; zend_call_method_with_0_params(&zobject, ce, NULL, "haschildren", &retval); - if (zend_is_true(retval)) { + if (retval) { + has_children = zend_is_true(retval); zval_ptr_dtor(&retval); - switch (object->mode) { + if (has_children) { + switch (object->mode) { case RIT_LEAVES_ONLY: case RIT_CHILD_FIRST: object->iterators[object->level].state = RS_CHILD; @@ -193,9 +196,9 @@ next_step: case RIT_SELF_FIRST: object->iterators[object->level].state = RS_SELF; goto next_step; + } } } - zval_ptr_dtor(&retval); object->iterators[object->level].state = RS_NEXT; return /* self */; case RS_SELF: -- 2.50.1