Strip split stale mouse terminators

This commit is contained in:
DuProcess
2026-07-09 19:30:25 -04:00
parent 1466516053
commit 1601d474e7
+15
View File
@@ -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) byte if byte.is_ascii_digit() => mouse_report_params_len(bytes, offset, 1)
.or_else(|| orphan_mouse_suffix_len(bytes, offset)), .or_else(|| orphan_mouse_suffix_len(bytes, offset)),
b'M' | b'm' if offset == 0 => orphan_leading_mouse_terminator_len(bytes, offset),
_ => None, _ => None,
} }
} }
@@ -5810,6 +5811,13 @@ fn orphan_mouse_suffix_len(bytes: &[u8], offset: usize) -> Option<usize> {
None 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 { fn stale_mouse_report_maybe_incomplete(bytes: &[u8], offset: usize) -> bool {
let Some(rest) = bytes.get(offset..) else { let Some(rest) = bytes.get(offset..) else {
return false; return false;
@@ -8907,11 +8915,18 @@ mod tests {
assert_eq!(strip_stale_mouse_reports(b"10m"), b""); 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] #[test]
fn numeric_semicolon_input_survives_stale_filter() { fn numeric_semicolon_input_survives_stale_filter() {
assert_eq!(strip_stale_mouse_reports(b"123;"), b"123;"); 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"12;34"), b"12;34");
assert_eq!(strip_stale_mouse_reports(b"echo 1;"), b"echo 1;"); 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] #[test]