From f57c75112df5a5a4e94ba623db86b20e99d2811d Mon Sep 17 00:00:00 2001 From: Rob Richards Date: Wed, 3 May 2006 08:43:04 +0000 Subject: [PATCH] Fix bug #37277 (cloning Dom Documents or Nodes does not work) Proper fix for bug #36859 add test --- ext/dom/attr.c | 2 +- ext/dom/element.c | 2 +- ext/dom/php_dom.c | 1 - ext/dom/tests/bug37277.phpt | 25 +++++++++++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 ext/dom/tests/bug37277.phpt diff --git a/ext/dom/attr.c b/ext/dom/attr.c index 0ad33ec200..9defda6273 100644 --- a/ext/dom/attr.c +++ b/ext/dom/attr.c @@ -77,7 +77,7 @@ PHP_METHOD(domattr, __construct) } if (intern != NULL) { - oldnode = (xmlNodePtr)intern->ptr; + oldnode = dom_object_get_node(intern); if (oldnode != NULL) { php_libxml_node_free_resource(oldnode TSRMLS_CC); } diff --git a/ext/dom/element.c b/ext/dom/element.c index ca9b764acc..b774449e74 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -128,7 +128,7 @@ PHP_METHOD(domelement, __construct) intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern != NULL) { - oldnode = (xmlNodePtr)intern->ptr; + oldnode = dom_object_get_node(intern); if (oldnode != NULL) { php_libxml_node_free_resource(oldnode TSRMLS_CC); } diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index cfbb1b15c8..1180c73b82 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -443,7 +443,6 @@ zend_object_value dom_objects_store_clone_obj(zval *zobject TSRMLS_DC) retval.handle = zend_objects_store_put(new_object, obj->dtor, obj->free_storage, obj->clone TSRMLS_CC); intern = (dom_object *) new_object; intern->handle = retval.handle; - intern->ptr = NULL; retval.handlers = Z_OBJ_HT_P(zobject); old_object = (dom_object *) obj->object; diff --git a/ext/dom/tests/bug37277.phpt b/ext/dom/tests/bug37277.phpt new file mode 100644 index 0000000000..4a01684171 --- /dev/null +++ b/ext/dom/tests/bug37277.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug # 37277 (cloning Dom Documents or Nodes does not work) +--SKIPIF-- + +--FILE-- +'; +$dom1->loadXml($xml); + +$node = clone $dom1->documentElement; + +$dom2 = new DomDocument('1.0', 'UTF-8'); +$dom2->appendChild($dom2->importNode($node->cloneNode(true), TRUE)); + +print $dom2->saveXML(); + + +?> +--EXPECT-- + + + + -- 2.50.1