summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2006-05-03 08:43:04 +0000
committerRob Richards <rrichards@php.net>2006-05-03 08:43:04 +0000
commitf57c75112df5a5a4e94ba623db86b20e99d2811d (patch)
tree03c296df8db16c96177e9fe6f042dca28402366a
parenta34755e9cf08a911e2c8a37046568e5dc44f1a99 (diff)
downloadphp-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.c2
-rw-r--r--ext/dom/element.c2
-rw-r--r--ext/dom/php_dom.c1
-rw-r--r--ext/dom/tests/bug37277.phpt25
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/>
+