Browse Source

fix bug #39760 (cloning fails on nested SimpleXML-Object)

add test
experimental/5.2-WITH_DRCP
Rob Richards 20 years ago
parent
commit
604f18c20d
  1. 10
      ext/simplexml/simplexml.c
  2. 40
      ext/simplexml/tests/bug39760.phpt

10
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);
}

40
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
Loading…
Cancel
Save