diff options
author | Rob Richards <rrichards@php.net> | 2006-05-03 08:43:04 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2006-05-03 08:43:04 +0000 |
commit | f57c75112df5a5a4e94ba623db86b20e99d2811d (patch) | |
tree | 03c296df8db16c96177e9fe6f042dca28402366a | |
parent | a34755e9cf08a911e2c8a37046568e5dc44f1a99 (diff) | |
download | php-git-f57c75112df5a5a4e94ba623db86b20e99d2811d.tar.gz |
Fix bug #37277 (cloning Dom Documents or Nodes does not work)
Proper fix for bug #36859
add test
-rw-r--r-- | ext/dom/attr.c | 2 | ||||
-rw-r--r-- | ext/dom/element.c | 2 | ||||
-rw-r--r-- | ext/dom/php_dom.c | 1 | ||||
-rw-r--r-- | ext/dom/tests/bug37277.phpt | 25 |
4 files changed, 27 insertions, 3 deletions
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-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +$dom1 = new DomDocument('1.0', 'UTF-8'); + +$xml = '<foo />'; +$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-- + +<?xml version="1.0" encoding="UTF-8"?> +<foo/> + |