From 56a636a5107c4f62bdd97fd0688f9f6151a86ee4 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 22 Jul 2023 21:47:09 +0200 Subject: [PATCH 1/2] Add test with wrong output --- .../tests/DOMCharacterData_replaceWith_self.phpt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 ext/dom/tests/DOMCharacterData_replaceWith_self.phpt diff --git a/ext/dom/tests/DOMCharacterData_replaceWith_self.phpt b/ext/dom/tests/DOMCharacterData_replaceWith_self.phpt new file mode 100644 index 0000000000000..0bd8710290064 --- /dev/null +++ b/ext/dom/tests/DOMCharacterData_replaceWith_self.phpt @@ -0,0 +1,15 @@ +--TEST-- +DOMCharacterData::replaceWith() with itself +--EXTENSIONS-- +dom +--FILE-- +loadXML(''); +$cdata = $dom->documentElement->firstChild; +$cdata->replaceWith($cdata); +echo $dom->saveXML(); +?> +--EXPECT-- + + From f5a114968eb41e6f63a35c312657e4dcb3407373 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 22 Jul 2023 21:48:09 +0200 Subject: [PATCH 2/2] Fix DOMCharacterData::replaceWith() with itself Previously, when replacing the node with itself, the node disappeared. --- ext/dom/characterdata.c | 3 +-- ext/dom/tests/DOMCharacterData_replaceWith_self.phpt | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/ext/dom/characterdata.c b/ext/dom/characterdata.c index 85660a7b3549f..3876cf0409856 100644 --- a/ext/dom/characterdata.c +++ b/ext/dom/characterdata.c @@ -410,8 +410,7 @@ PHP_METHOD(DOMCharacterData, replaceWith) id = ZEND_THIS; DOM_GET_OBJ(context, id, xmlNodePtr, intern); - dom_parent_node_after(intern, args, argc); - dom_child_node_remove(intern); + dom_child_replace_with(intern, args, argc); } #endif diff --git a/ext/dom/tests/DOMCharacterData_replaceWith_self.phpt b/ext/dom/tests/DOMCharacterData_replaceWith_self.phpt index 0bd8710290064..dfeedd7942663 100644 --- a/ext/dom/tests/DOMCharacterData_replaceWith_self.phpt +++ b/ext/dom/tests/DOMCharacterData_replaceWith_self.phpt @@ -12,4 +12,4 @@ echo $dom->saveXML(); ?> --EXPECT-- - +