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--
-
+