summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-06-19 14:23:32 +0200
committerAnatol Belski <ab@php.net>2015-06-19 14:23:32 +0200
commit1e65b65dd683612925d99202c45ed8ed410edbde (patch)
tree4f4443c1a031ee18bf2972b5fde41b5d25829404
parentd81480693c26ebe6b7384563bc808472f9172ecd (diff)
downloadphp-git-1e65b65dd683612925d99202c45ed8ed410edbde.tar.gz
more precise way to destroy iterator object
which also fixes the iterator_to_array test
-rw-r--r--ext/dom/dom_iterators.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
index 7cef63bf9a..a96b6bfe9a 100644
--- a/ext/dom/dom_iterators.c
+++ b/ext/dom/dom_iterators.c
@@ -182,6 +182,7 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */
int previndex=0;
HashTable *nodeht;
zval *entry;
+ zend_bool do_curobj_undef = 1;
php_dom_iterator *iterator = (php_dom_iterator *)iter;
@@ -201,6 +202,7 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */
zval_ptr_dtor(&iterator->curobj);
ZVAL_UNDEF(&iterator->curobj);
ZVAL_COPY(&iterator->curobj, entry);
+ do_curobj_undef = 0;
}
} else {
curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
@@ -231,7 +233,7 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */
}
}
err:
- if (IS_UNDEF != Z_TYPE(iterator->curobj)) {
+ if (do_curobj_undef) {
zval_ptr_dtor(&iterator->curobj);
ZVAL_UNDEF(&iterator->curobj);
}