Strip split stale mouse terminators
This commit is contained in:
@@ -5774,6 +5774,7 @@ fn stale_mouse_report_len(bytes: &[u8], offset: usize) -> Option<usize> {
|
||||
},
|
||||
byte if byte.is_ascii_digit() => mouse_report_params_len(bytes, offset, 1)
|
||||
.or_else(|| orphan_mouse_suffix_len(bytes, offset)),
|
||||
b'M' | b'm' if offset == 0 => orphan_leading_mouse_terminator_len(bytes, offset),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
@@ -5810,6 +5811,13 @@ fn orphan_mouse_suffix_len(bytes: &[u8], offset: usize) -> Option<usize> {
|
||||
None
|
||||
}
|
||||
|
||||
fn orphan_leading_mouse_terminator_len(bytes: &[u8], offset: usize) -> Option<usize> {
|
||||
if offset != 0 || !matches!(bytes.get(offset), Some(b'M' | b'm')) {
|
||||
return None;
|
||||
}
|
||||
mouse_report_params_len(bytes, offset + 1, 1).map(|len| len + 1)
|
||||
}
|
||||
|
||||
fn stale_mouse_report_maybe_incomplete(bytes: &[u8], offset: usize) -> bool {
|
||||
let Some(rest) = bytes.get(offset..) else {
|
||||
return false;
|
||||
@@ -8907,11 +8915,18 @@ mod tests {
|
||||
assert_eq!(strip_stale_mouse_reports(b"10m"), b"");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn leading_mouse_terminator_from_split_report_is_stripped() {
|
||||
assert_eq!(strip_stale_mouse_reports(b"M35;149;1Mls\r"), b"ls\r");
|
||||
assert_eq!(strip_stale_mouse_reports(b"m35;149;1Mls\r"), b"ls\r");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn numeric_semicolon_input_survives_stale_filter() {
|
||||
assert_eq!(strip_stale_mouse_reports(b"123;"), b"123;");
|
||||
assert_eq!(strip_stale_mouse_reports(b"12;34"), b"12;34");
|
||||
assert_eq!(strip_stale_mouse_reports(b"echo 1;"), b"echo 1;");
|
||||
assert_eq!(strip_stale_mouse_reports(b"make test"), b"make test");
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
Reference in New Issue
Block a user