]> granicus.if.org Git - php/commitdiff
Fix bug #37277 (cloning Dom Documents or Nodes does not work)
authorRob Richards <rrichards@php.net>
Wed, 3 May 2006 08:43:04 +0000 (08:43 +0000)
committerRob Richards <rrichards@php.net>
Wed, 3 May 2006 08:43:04 +0000 (08:43 +0000)
Proper fix for bug #36859
add test

ext/dom/attr.c
ext/dom/element.c
ext/dom/php_dom.c
ext/dom/tests/bug37277.phpt [new file with mode: 0644]

index 0ad33ec20089deb49ef596bf68aff6f3ebdd4166..9defda6273f60727cb2608021641f8269a79db7b 100644 (file)
@@ -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);
                }
index ca9b764acc962e714113e338bc94fa39c628e1b3..b774449e7471f9f11656ac26a52ce0a4b10de4fc 100644 (file)
@@ -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);
                }
index cfbb1b15c8ef19d4c2fb3709134f9ea761362afe..1180c73b824dcb4877ed397ffe01927a55e18e6d 100644 (file)
@@ -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 (file)
index 0000000..4a01684
--- /dev/null
@@ -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/>
+