From 21ee0ad6fc14348ca35fa31a17c53dcec6563db8 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 23 Jun 2021 16:19:40 +0200 Subject: [PATCH] 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. --- Userland/Libraries/LibVT/TerminalWidget.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibVT/TerminalWidget.cpp b/Userland/Libraries/LibVT/TerminalWidget.cpp index be866a0e10a418..49b2a8061dfb41 100644 --- a/Userland/Libraries/LibVT/TerminalWidget.cpp +++ b/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; }