Bläddra i källkod

LibVT: Don't crash when clicking outside of the terminal's buffer area

When resizing a terminal window the number of columns may change.
Previously we assumed that this also affects lines which were in the
terminal's buffer while that is not necessarily true.
Gunnar Beutner 4 år sedan
förälder
incheckning
21ee0ad6fc
1 ändrade filer med 4 tillägg och 3 borttagningar
  1. 4 3
      Userland/Libraries/LibVT/TerminalWidget.cpp

+ 4 - 3
Userland/Libraries/LibVT/TerminalWidget.cpp

@@ -592,8 +592,9 @@ VT::Position TerminalWidget::buffer_position_at(const Gfx::IntPoint& position) c
         column = 0;
     if (row >= m_terminal.rows())
         row = m_terminal.rows() - 1;
-    if (column >= m_terminal.columns())
-        column = m_terminal.columns() - 1;
+    auto& line = m_terminal.line(row);
+    if (column >= (int)line.length())
+        column = line.length() - 1;
     row += m_scrollbar->value();
     return { row, column };
 }
@@ -736,7 +737,7 @@ void TerminalWidget::doubleclick_event(GUI::MouseEvent& event)
             start_column = column;
         }
 
-        for (int column = position.column(); column < m_terminal.columns() && (line.code_point(column) == ' ') == want_whitespace; ++column) {
+        for (int column = position.column(); column < (int)line.length() && (line.code_point(column) == ' ') == want_whitespace; ++column) {
             end_column = column;
         }