com php-src: better approach to fix bug #69846: ext/dom/dom_i terators.c ext/dom/php_dom.h
| From: | Anatol Belski | Date: | Fri, 19 Jun 2015 09:22:12 +0000 |
| Subject: | com php-src: better approach to fix bug #69846: ext/dom/dom_i terators.c ext/dom/php_dom.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-87385@lists.php.net to get a copy of this message | ||
Commit: d079a1c9ea16ff2c5f40f82bd558355f78f103cf
Author: Anatol Belski <ab@php.net> Fri, 19 Jun 2015 11:22:12 +0200
Parents: bb4454b5133adec98f9b454018b9071da675527b
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d079a1c9ea16ff2c5f40f82bd558355f78f103cf
Log:
better approach to fix bug #69846
don't destroy the current iterator object too early
Bugs:
https://bugs.php.net/69846
Changed paths:
M ext/dom/dom_iterators.c
M ext/dom/php_dom.h
Diff:
diff --git a/ext/dom/dom_iterators.c b/ext/dom/dom_iterators.c
index e72bd09..7cef63b 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);
}
diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h
index 500990e..65534b1 100644
--- a/ext/dom/php_dom.h
+++ b/ext/dom/php_dom.h
@@ -132,8 +132,7 @@ int dom_nodelist_has_dimension(zval *object, zval *member, int check_empty);
#define REGISTER_DOM_CLASS(ce, name, parent_ce, funcs, entry) \
INIT_CLASS_ENTRY(ce, name, funcs); \
ce.create_object = dom_objects_new; \
-entry = zend_register_internal_class_ex(&ce, parent_ce); \
-entry->ce_flags |= ZEND_ACC_USE_GUARDS;
+entry = zend_register_internal_class_ex(&ce, parent_ce);
#define DOM_GET_OBJ(__ptr, __id, __prtype, __intern) { \
__intern = Z_DOMOBJ_P(__id); \