summaryrefslogtreecommitdiff
path: root/Userland
diff options
context:
space:
mode:
authorGunnar Beutner <gbeutner@serenityos.org>2021-06-23 16:19:40 +0200
committerAndreas Kling <kling@serenityos.org>2021-06-23 16:26:40 +0200
commit21ee0ad6fc14348ca35fa31a17c53dcec6563db8 (patch)
treeb2421fc78372eecf0d13bed77e88f3a919572912 /Userland
parentc503a28e192958028f46cfa21225df51c986d8ba (diff)
downloadserenity-21ee0ad6fc14348ca35fa31a17c53dcec6563db8.zip
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.
Diffstat (limited to 'Userland')
-rw-r--r--Userland/Libraries/LibVT/TerminalWidget.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/Userland/Libraries/LibVT/TerminalWidget.cpp b/Userland/Libraries/LibVT/TerminalWidget.cpp
index be866a0e10..49b2a8061d 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;
}