Skip to content

Commit

Permalink
mkv: report decode error on invalid vint width
Browse files Browse the repository at this point in the history
  • Loading branch information
sscobici committed Jan 4, 2025
1 parent 8534bcb commit 0bd41f4
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions symphonia-format-mkv/src/ebml.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ fn read_vint<R: ReadBytes>(mut reader: R) -> Result<(u64, u32)> {
}

let vint_width = byte.leading_zeros();
if vint_width == 8 {
return decode_error("mkv: vint width must less than 8 bits");
}
let mut vint = u64::from(byte);
// Clear VINT_MARKER bit
vint ^= 1 << (7 - vint_width);
Expand Down Expand Up @@ -119,6 +122,7 @@ mod tests {

#[test]
fn variable_unsigned_integer_parsing() {
assert!(read_unsigned_vint(BufReader::new(&[0x0])).is_err());
assert_eq!(read_unsigned_vint(BufReader::new(&[0x82])).unwrap(), 2);
assert_eq!(read_unsigned_vint(BufReader::new(&[0x40, 0x02])).unwrap(), 2);
assert_eq!(read_unsigned_vint(BufReader::new(&[0x20, 0x00, 0x02])).unwrap(), 2);
Expand Down

0 comments on commit 0bd41f4

Please sign in to comment.