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.
This commit is contained in:
Gunnar Beutner 2021-06-23 16:19:40 +02:00 committed by Andreas Kling
commit 21ee0ad6fc
Notes: sideshowbarker 2024-07-18 11:37:30 +09:00

View file

@ -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;
}