Skip to content

Commit 604f18c

Browse files
author
Rob Richards
committed
fix bug #39760 (cloning fails on nested SimpleXML-Object)
add test
1 parent 7f37618 commit 604f18c

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

ext/simplexml/simplexml.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1761,6 +1761,16 @@ sxe_object_clone(void *object, void **clone_ptr TSRMLS_DC)
17611761
clone->document->refcount++;
17621762
docp = clone->document->ptr;
17631763
}
1764+
1765+
clone->iter.isprefix = sxe->iter.isprefix;
1766+
if (sxe->iter.name != NULL) {
1767+
clone->iter.name = xmlStrdup((xmlChar *)sxe->iter.name);
1768+
}
1769+
if (sxe->iter.nsprefix != NULL) {
1770+
clone->iter.nsprefix = xmlStrdup((xmlChar *)sxe->iter.nsprefix);
1771+
}
1772+
clone->iter.type = sxe->iter.type;
1773+
17641774
if (sxe->node) {
17651775
nodep = xmlDocCopyNode(sxe->node->node, docp, 1);
17661776
}

ext/simplexml/tests/bug39760.phpt

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
--TEST--
2+
Bug #39760 (cloning fails on nested SimpleXML-Object)
3+
--SKIPIF--
4+
<?php if (!extension_loaded("simplexml")) print "skip simplexml extension is not loaded"; ?>
5+
--FILE--
6+
<?php
7+
8+
$xml = '<?xml version="1.0" ?>
9+
<test>
10+
<level1>
11+
<level2a>text1</level2a>
12+
<level2b>text2</level2b>
13+
</level1>
14+
</test>';
15+
$test = simplexml_load_string($xml);
16+
17+
var_dump($test->level1->level2a);
18+
19+
$test2 = clone $test;
20+
var_dump($test2->level1->level2a);
21+
22+
$test3 = clone $test->level1->level2a;
23+
var_dump($test3);
24+
25+
echo "Done\n";
26+
?>
27+
--EXPECTF--
28+
object(SimpleXMLElement)#%d (1) {
29+
[0]=>
30+
string(5) "text1"
31+
}
32+
object(SimpleXMLElement)#%d (1) {
33+
[0]=>
34+
string(5) "text1"
35+
}
36+
object(SimpleXMLElement)#%d (1) {
37+
[0]=>
38+
string(5) "text1"
39+
}
40+
Done

0 commit comments

Comments
 (0)