aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Duerr <chrisduerr@users.noreply.github.com>2018-09-05 21:15:16 +0000
committerGitHub <noreply@github.com>2018-09-05 21:15:16 +0000
commit43882ade33d4c14ee7248e489a2d33395faaa0b1 (patch)
treec976915d53a8ce1cc072f86424323255afd61d9b
parent72495172c25e00799f29eb2e79fe40ddfa189866 (diff)
downloadalacritty-43882ade33d4c14ee7248e489a2d33395faaa0b1.tar.gz
alacritty-43882ade33d4c14ee7248e489a2d33395faaa0b1.zip
Fix substraction underflow with IL sequence
The IL escape sequence (CSI Ps L) allows inserting blank, uninitialized lines. `Ps` is a placeholder for the number of lines that should be inserted. Before this change Alacritty would crash when a large number of lines was passed as `Ps` parameter. The issue was caused whenever the current line of the cursor plus the lines that should be inserted would leave the bottom of the terminal, since this makes indexing impossible. This patch makes sure that the biggest amount of lines inserted does never exceed the end of the visible region minus the current line of the curser, which fixes the underflow issue. This fixes #1515.
-rw-r--r--src/term/mod.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/term/mod.rs b/src/term/mod.rs
index 21c97671..04d110af 100644
--- a/src/term/mod.rs
+++ b/src/term/mod.rs
@@ -1209,9 +1209,10 @@ impl Term {
/// Text moves down; clear at bottom
/// Expects origin to be in scroll range.
#[inline]
- fn scroll_down_relative(&mut self, origin: Line, lines: Line) {
+ fn scroll_down_relative(&mut self, origin: Line, mut lines: Line) {
trace!("scroll_down_relative: origin={}, lines={}", origin, lines);
- let lines = min(lines, self.scroll_region.end - self.scroll_region.start);
+ lines = min(lines, self.scroll_region.end - self.scroll_region.start);
+ lines = min(lines, self.scroll_region.end - origin);
// Scroll between origin and bottom
self.grid.scroll_down(&(origin..self.scroll_region.end), lines, &self.cursor.template);