From f7acd6aca52f16076232d3a95eccbe3f896252cb Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Wed, 14 Jul 2021 09:11:34 -0400 Subject: [PATCH] LibWeb: Handle when the last selected node does not contain text If the text-for-rendering of the last selected node is empty, the select all implementation would end up setting the index to -1. This value is used directly for a substring length in the copy text implementation, thus would cause a failed assertion. --- Userland/Libraries/LibWeb/Page/BrowsingContext.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp b/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp index 70d9beeb4b..58698078f1 100644 --- a/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp +++ b/Userland/Libraries/LibWeb/Page/BrowsingContext.cpp @@ -305,8 +305,11 @@ void BrowsingContext::select_all() VERIFY(last_layout_node); int last_layout_node_index_in_node = 0; - if (is(*last_layout_node)) - last_layout_node_index_in_node = verify_cast(*last_layout_node).text_for_rendering().length() - 1; + if (is(*last_layout_node)) { + auto const& text_for_rendering = verify_cast(*last_layout_node).text_for_rendering(); + if (!text_for_rendering.is_empty()) + last_layout_node_index_in_node = text_for_rendering.length() - 1; + } layout_root->set_selection({ { first_layout_node, 0 }, { last_layout_node, last_layout_node_index_in_node } }); }