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)
|
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]
|
||||||
|
|||||||
Reference in New Issue
Block a user