aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-03 16:21:20 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-03 16:26:20 -0500
commit1b659eb6ae2e5b6e53eaecaf7e1324ef92fc541d (patch)
tree5ab8f7d34ef5f930d32bc52fdd9a9db4c4bbd427
parentd648b8f074965110938bbca4dd502309d1fa75ca (diff)
downloadvt100-rust-1b659eb6ae2e5b6e53eaecaf7e1324ef92fc541d.tar.gz
vt100-rust-1b659eb6ae2e5b6e53eaecaf7e1324ef92fc541d.zip
fix receiving empty params
-rw-r--r--src/screen.rs10
-rw-r--r--tests/weird.rs8
2 files changed, 13 insertions, 5 deletions
diff --git a/src/screen.rs b/src/screen.rs
index 2dba4b5..74e0559 100644
--- a/src/screen.rs
+++ b/src/screen.rs
@@ -1571,7 +1571,7 @@ impl vte::Perform for Screen {
}
fn canonicalize_params_1(params: &vte::Params, default: u16) -> u16 {
- let first = params.iter().next().map_or(0, |x| x[0]);
+ let first = params.iter().next().map_or(0, |x| *x.get(0).unwrap_or(&0));
if first == 0 {
default
} else {
@@ -1585,10 +1585,10 @@ fn canonicalize_params_2(
default2: u16,
) -> (u16, u16) {
let mut iter = params.iter();
- let first = iter.next().map_or(0, |x| x[0]);
+ let first = iter.next().map_or(0, |x| *x.get(0).unwrap_or(&0));
let first = if first == 0 { default1 } else { first };
- let second = iter.next().map_or(0, |x| x[0]);
+ let second = iter.next().map_or(0, |x| *x.get(0).unwrap_or(&0));
let second = if second == 0 { default2 } else { second };
(first, second)
@@ -1599,10 +1599,10 @@ fn canonicalize_params_decstbm(
size: crate::grid::Size,
) -> (u16, u16) {
let mut iter = params.iter();
- let top = iter.next().map_or(0, |x| x[0]);
+ let top = iter.next().map_or(0, |x| *x.get(0).unwrap_or(&0));
let top = if top == 0 { 1 } else { top };
- let bottom = iter.next().map_or(0, |x| x[0]);
+ let bottom = iter.next().map_or(0, |x| *x.get(0).unwrap_or(&0));
let bottom = if bottom == 0 { size.rows } else { bottom };
(top, bottom)
diff --git a/tests/weird.rs b/tests/weird.rs
index bae2aeb..46ecd20 100644
--- a/tests/weird.rs
+++ b/tests/weird.rs
@@ -4,3 +4,11 @@ mod helpers;
fn intermediate_control() {
helpers::fixture("intermediate_control");
}
+
+#[test]
+fn many_empty_params() {
+ let mut parser = vt100::Parser::default();
+ parser.process(b"\x1b[::::::::::::::::::::::::::::::::@");
+ parser.process(b"\x1b[::::::::::::::::::::::::::::::::H");
+ parser.process(b"\x1b[::::::::::::::::::::::::::::::::r");
+}