From: Antony Dovgal Date: Tue, 28 Nov 2006 18:57:37 +0000 (+0000) Subject: fix #39662 (Segfault when calling asXML() of a cloned SimpleXMLElement) X-Git-Tag: RELEASE_1_0_0RC1~894 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d2e03795d91bb863493a8d84315c1757979824c5;p=php fix #39662 (Segfault when calling asXML() of a cloned SimpleXMLElement) --- diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 909bdef2f3..a8129efd4e 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1784,6 +1784,7 @@ sxe_object_clone(void *object, void **clone_ptr TSRMLS_DC) } if (sxe->node) { nodep = xmlDocCopyNode(sxe->node->node, docp, 1); + nodep->parent = sxe->node->node->parent; } php_libxml_increment_node_ptr((php_libxml_node_object *)clone, nodep, NULL TSRMLS_CC); diff --git a/ext/simplexml/tests/bug39662.phpt b/ext/simplexml/tests/bug39662.phpt new file mode 100644 index 0000000000..c55df8b905 --- /dev/null +++ b/ext/simplexml/tests/bug39662.phpt @@ -0,0 +1,58 @@ +--TEST-- +Bug #39662 (Segfault when calling asXML() of a cloned SimpleXMLElement) +--SKIPIF-- + +--FILE-- + + + +'; + +$root = simplexml_load_string($xml); +$clone = clone $root; +var_dump($root); +var_dump($clone); +var_dump($clone->asXML()); + +echo "Done\n"; +?> +--EXPECTF-- +object(SimpleXMLElement)#%d (1) { + [0]=> + string(2) " + +" +} +object(SimpleXMLElement)#%d (1) { + [0]=> + string(2) " + +" +} +string(55) " + + + +" +Done +--UEXPECTF-- +object(SimpleXMLElement)#%d (1) { + [0]=> + unicode(2) " + +" +} +object(SimpleXMLElement)#%d (1) { + [0]=> + unicode(2) " + +" +} +string(55) " + + + +" +Done