From 0577a664ddcc21c6cbbb6df569303ee37f6aed77 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Tue, 6 Feb 2024 19:26:03 +0000 Subject: [PATCH] LibWeb: Use correct offset value when replacing character data Previously, the range's end offset was being set using it's previous value. --- ...elete-from-text-node-with-associated-range.txt | 1 + ...lete-from-text-node-with-associated-range.html | 15 +++++++++++++++ Userland/Libraries/LibWeb/DOM/CharacterData.cpp | 2 +- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 Tests/LibWeb/Text/expected/DOM/Delete-from-text-node-with-associated-range.txt create mode 100644 Tests/LibWeb/Text/input/DOM/Delete-from-text-node-with-associated-range.html diff --git a/Tests/LibWeb/Text/expected/DOM/Delete-from-text-node-with-associated-range.txt b/Tests/LibWeb/Text/expected/DOM/Delete-from-text-node-with-associated-range.txt new file mode 100644 index 0000000000..257cc5642c --- /dev/null +++ b/Tests/LibWeb/Text/expected/DOM/Delete-from-text-node-with-associated-range.txt @@ -0,0 +1 @@ +foo diff --git a/Tests/LibWeb/Text/input/DOM/Delete-from-text-node-with-associated-range.html b/Tests/LibWeb/Text/input/DOM/Delete-from-text-node-with-associated-range.html new file mode 100644 index 0000000000..1d24e7fe04 --- /dev/null +++ b/Tests/LibWeb/Text/input/DOM/Delete-from-text-node-with-associated-range.html @@ -0,0 +1,15 @@ + + diff --git a/Userland/Libraries/LibWeb/DOM/CharacterData.cpp b/Userland/Libraries/LibWeb/DOM/CharacterData.cpp index f8eae93109..2d3b8aaa7a 100644 --- a/Userland/Libraries/LibWeb/DOM/CharacterData.cpp +++ b/Userland/Libraries/LibWeb/DOM/CharacterData.cpp @@ -98,7 +98,7 @@ WebIDL::ExceptionOr CharacterData::replace_data(size_t offset, size_t coun // 9. For each live range whose end node is node and end offset is greater than offset but less than or equal to offset plus count, set its end offset to offset. for (auto& range : Range::live_ranges()) { if (range->end_container() == this && range->end_offset() > offset && range->end_offset() <= (offset + count)) - TRY(range->set_end(*range->end_container(), range->end_offset())); + TRY(range->set_end(*range->end_container(), offset)); } // 10. For each live range whose start node is node and start offset is greater than offset plus count, increase its start offset by data’s length and decrease it by count.