summaryrefslogtreecommitdiff
path: root/ext/dom/dom_iterators.c
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2015-06-19 11:22:12 +0200
committerAnatol Belski <ab@php.net>2015-06-19 11:22:12 +0200
commitd079a1c9ea16ff2c5f40f82bd558355f78f103cf (patch)
tree871566a2f47d15ce4f0171a6c7cbc6db0460d956 /ext/dom/dom_iterators.c
parentbb4454b5133adec98f9b454018b9071da675527b (diff)
downloadphp-git-d079a1c9ea16ff2c5f40f82bd558355f78f103cf.tar.gz
better approach to fix bug #69846
don't destroy the current iterator object too early
Diffstat (limited to 'ext/dom/dom_iterators.c')
-rw-r--r--ext/dom/dom_iterators.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
index e72bd090ac..7cef63bf9a 100644
--- a/ext/dom/dom_iterators.c
+++ b/ext/dom/dom_iterators.c
@@ -190,8 +190,6 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */
objmap = (dom_nnodemap_object *)nnmap->ptr;
intern = Z_DOMOBJ_P(&iterator->curobj);
- zval_ptr_dtor(&iterator->curobj);
- ZVAL_UNDEF(&iterator->curobj);
if (intern != NULL && intern->ptr != NULL) {
if (objmap->nodetype != XML_ENTITY_NODE &&
@@ -200,6 +198,8 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */
nodeht = HASH_OF(&objmap->baseobj_zv);
zend_hash_move_forward(nodeht);
if ((entry = zend_hash_get_current_data(nodeht))) {
+ zval_ptr_dtor(&iterator->curobj);
+ ZVAL_UNDEF(&iterator->curobj);
ZVAL_COPY(&iterator->curobj, entry);
}
} else {
@@ -231,6 +231,10 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */
}
}
err:
+ if (IS_UNDEF != Z_TYPE(iterator->curobj)) {
+ zval_ptr_dtor(&iterator->curobj);
+ ZVAL_UNDEF(&iterator->curobj);
+ }
if (curnode) {
php_dom_create_object(curnode, &iterator->curobj, objmap->baseobj);
}