diff --git a/src/grid.rs b/src/grid.rs index 7768d06..b89d945 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -680,7 +680,7 @@ impl Grid { let mut prev_pos = self.pos; self.pos.col = 0; let scrolled = self.row_inc_scroll(1); - prev_pos.row -= scrolled; + prev_pos.row = prev_pos.row.saturating_sub(scrolled); let new_pos = self.pos; self.drawing_row_mut(prev_pos.row) // we assume self.pos.row is always valid, and so prev_pos.row diff --git a/tests/scroll.rs b/tests/scroll.rs index a73a688..801cf7a 100644 --- a/tests/scroll.rs +++ b/tests/scroll.rs @@ -176,6 +176,15 @@ fn edge_of_screen() { ); } +#[test] +fn one_row_wrap_does_not_panic() { + let mut parser = vt100::Parser::new(1, 1, 10); + + parser.process(b"ab"); + + assert_eq!(parser.screen().contents(), "b"); +} + #[test] fn scrollback_larger_than_rows() { let mut parser = vt100::Parser::new(3, 20, 10);