From 556acd82ee9e917b29dbda85d42ed40f93d085e3 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sun, 25 May 2025 12:26:22 +1200 Subject: [PATCH] LibWeb/Editing: Handle no active range in queryCommandState Fixes a crash when this is invoked if no range is active for the document. --- Libraries/LibWeb/Editing/ExecCommand.cpp | 3 +++ .../Editing/case-insensitive-strikethrough-command.txt | 1 + .../input/Editing/case-insensitive-strikethrough-command.html | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/Libraries/LibWeb/Editing/ExecCommand.cpp b/Libraries/LibWeb/Editing/ExecCommand.cpp index d65e2ec2ade..eac449cc611 100644 --- a/Libraries/LibWeb/Editing/ExecCommand.cpp +++ b/Libraries/LibWeb/Editing/ExecCommand.cpp @@ -329,6 +329,9 @@ WebIDL::ExceptionOr Document::query_command_state(FlyString const& command if (inline_values.is_empty()) return false; auto range = Editing::active_range(*this); + if (!range) + return false; + Vector> formattable_nodes; Editing::for_each_node_effectively_contained_in_range(range, [&](GC::Ref descendant) { if (Editing::is_formattable_node(descendant)) diff --git a/Tests/LibWeb/Text/expected/Editing/case-insensitive-strikethrough-command.txt b/Tests/LibWeb/Text/expected/Editing/case-insensitive-strikethrough-command.txt index fd5a14f9a87..fce34f441c5 100644 --- a/Tests/LibWeb/Text/expected/Editing/case-insensitive-strikethrough-command.txt +++ b/Tests/LibWeb/Text/expected/Editing/case-insensitive-strikethrough-command.txt @@ -1 +1,2 @@ +strikeThrough active?: false strikeThrough active?: true diff --git a/Tests/LibWeb/Text/input/Editing/case-insensitive-strikethrough-command.html b/Tests/LibWeb/Text/input/Editing/case-insensitive-strikethrough-command.html index a103f67e4ab..ee5c61ba1d8 100644 --- a/Tests/LibWeb/Text/input/Editing/case-insensitive-strikethrough-command.html +++ b/Tests/LibWeb/Text/input/Editing/case-insensitive-strikethrough-command.html @@ -9,7 +9,7 @@ const range = document.createRange(); const selection = window.getSelection(); - // println(`strikeThrough active?: ${document.queryCommandState("strikeThrough")}`); + println(`strikeThrough active?: ${document.queryCommandState("strikeThrough")}`); range.selectNodeContents(target); selection.removeAllRanges(); selection.addRange(range);