Sfoglia il codice sorgente

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.
Timothy Flynn 4 anni fa
parent
commit
f7acd6aca5
1 ha cambiato i file con 5 aggiunte e 2 eliminazioni
  1. 5 2
      Userland/Libraries/LibWeb/Page/BrowsingContext.cpp

+ 5 - 2
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<Layout::TextNode>(*last_layout_node))
-        last_layout_node_index_in_node = verify_cast<Layout::TextNode>(*last_layout_node).text_for_rendering().length() - 1;
+    if (is<Layout::TextNode>(*last_layout_node)) {
+        auto const& text_for_rendering = verify_cast<Layout::TextNode>(*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 } });
 }