diff options
author | Rob Richards <rrichards@php.net> | 2006-12-30 15:41:17 +0000 |
---|---|---|
committer | Rob Richards <rrichards@php.net> | 2006-12-30 15:41:17 +0000 |
commit | 604f18c20dff6d236fff104f335e3419b78b1801 (patch) | |
tree | b54f52c442b397e0c992cd0e252647de1be1b60e | |
parent | 7f376183f8fd8a29550c30d80d4fae43c27ebdce (diff) | |
download | php-git-604f18c20dff6d236fff104f335e3419b78b1801.tar.gz |
fix bug #39760 (cloning fails on nested SimpleXML-Object)
add test
-rw-r--r-- | ext/simplexml/simplexml.c | 10 | ||||
-rw-r--r-- | ext/simplexml/tests/bug39760.phpt | 40 |
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 |