summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2006-12-30 15:41:17 +0000
committerRob Richards <rrichards@php.net>2006-12-30 15:41:17 +0000
commit604f18c20dff6d236fff104f335e3419b78b1801 (patch)
treeb54f52c442b397e0c992cd0e252647de1be1b60e
parent7f376183f8fd8a29550c30d80d4fae43c27ebdce (diff)
downloadphp-git-604f18c20dff6d236fff104f335e3419b78b1801.tar.gz
fix bug #39760 (cloning fails on nested SimpleXML-Object)
add test
-rw-r--r--ext/simplexml/simplexml.c10
-rw-r--r--ext/simplexml/tests/bug39760.phpt40
2 files changed, 50 insertions, 0 deletions
diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c
index 915c1378d0..d95b61d7eb 100644
--- a/ext/simplexml/simplexml.c
+++ b/ext/simplexml/simplexml.c
@@ -1761,6 +1761,16 @@ sxe_object_clone(void *object, void **clone_ptr TSRMLS_DC)
clone->document->refcount++;
docp = clone->document->ptr;
}
+
+ clone->iter.isprefix = sxe->iter.isprefix;
+ if (sxe->iter.name != NULL) {
+ clone->iter.name = xmlStrdup((xmlChar *)sxe->iter.name);
+ }
+ if (sxe->iter.nsprefix != NULL) {
+ clone->iter.nsprefix = xmlStrdup((xmlChar *)sxe->iter.nsprefix);
+ }
+ clone->iter.type = sxe->iter.type;
+
if (sxe->node) {
nodep = xmlDocCopyNode(sxe->node->node, docp, 1);
}
diff --git a/ext/simplexml/tests/bug39760.phpt b/ext/simplexml/tests/bug39760.phpt
new file mode 100644
index 0000000000..e781765fa0
--- /dev/null
+++ b/ext/simplexml/tests/bug39760.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Bug #39760 (cloning fails on nested SimpleXML-Object)
+--SKIPIF--
+<?php if (!extension_loaded("simplexml")) print "skip simplexml extension is not loaded"; ?>
+--FILE--
+<?php
+
+$xml = '<?xml version="1.0" ?>
+<test>
+ <level1>
+ <level2a>text1</level2a>
+ <level2b>text2</level2b>
+ </level1>
+</test>';
+$test = simplexml_load_string($xml);
+
+var_dump($test->level1->level2a);
+
+$test2 = clone $test;
+var_dump($test2->level1->level2a);
+
+$test3 = clone $test->level1->level2a;
+var_dump($test3);
+
+echo "Done\n";
+?>
+--EXPECTF--
+object(SimpleXMLElement)#%d (1) {
+ [0]=>
+ string(5) "text1"
+}
+object(SimpleXMLElement)#%d (1) {
+ [0]=>
+ string(5) "text1"
+}
+object(SimpleXMLElement)#%d (1) {
+ [0]=>
+ string(5) "text1"
+}
+Done