diff --git a/termwiz/src/escape/osc.rs b/termwiz/src/escape/osc.rs index 736269af5..9cac57e5e 100644 --- a/termwiz/src/escape/osc.rs +++ b/termwiz/src/escape/osc.rs @@ -881,8 +881,12 @@ impl ITermFileData { let last = osc.len() - 1; for (idx, s) in osc.iter().enumerate().skip(1) { let param = if idx == 1 { - // skip over File= - &s[5..] + if s.len() >= 5 { + // skip over File= + &s[5..] + } else { + bail!("failed to parse file data; File= not found"); + } } else { s }; diff --git a/termwiz/src/escape/parser/mod.rs b/termwiz/src/escape/parser/mod.rs index 54139fe9d..69e6a0c28 100644 --- a/termwiz/src/escape/parser/mod.rs +++ b/termwiz/src/escape/parser/mod.rs @@ -839,4 +839,10 @@ mod test { actions ); } + + #[test] + fn itermfiledata_oob() { + let mut p = Parser::new(); + p.parse_as_vec(b"\x9d1337\xff;File\x1b"); + } }