]> granicus.if.org Git - php/commitdiff
MFB: fix bug #39760 (cloning fails on nested SimpleXML-Object)
authorRob Richards <rrichards@php.net>
Sat, 30 Dec 2006 15:42:24 +0000 (15:42 +0000)
committerRob Richards <rrichards@php.net>
Sat, 30 Dec 2006 15:42:24 +0000 (15:42 +0000)
add test

ext/simplexml/simplexml.c
ext/simplexml/tests/bug39760.phpt [new file with mode: 0644]

index 34f4b94119176ef88a675290a0b34b367915b752..b798e76c146b2dfd955f8e39f7879fcbff02e5c7 100644 (file)
@@ -1783,6 +1783,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 (file)
index 0000000..c91e29c
--- /dev/null
@@ -0,0 +1,55 @@
+--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 = b'<?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
+
+--UEXPECTF--   
+object(SimpleXMLElement)#%d (1) {
+  [0]=>
+  unicode(5) "text1"
+}
+object(SimpleXMLElement)#%d (1) {
+  [0]=>
+  unicode(5) "text1"
+}
+object(SimpleXMLElement)#%d (1) {
+  [0]=>
+  unicode(5) "text1"
+}
+Done