Commit 43882ade authored by Christian Duerr's avatar Christian Duerr Committed by GitHub

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.
parent 72495172
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment