From 9208c8c27666cbc0876ef949a5a883badf86cce0 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Sat, 11 Jan 2025 16:39:58 +0100 Subject: [PATCH] flac: update UTF-8 reader code to handle a larger range --- nihav-llaudio/src/codecs/flac.rs | 2 +- nihav-llaudio/src/demuxers/flac.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nihav-llaudio/src/codecs/flac.rs b/nihav-llaudio/src/codecs/flac.rs index 6ebc78d..c1142b1 100644 --- a/nihav-llaudio/src/codecs/flac.rs +++ b/nihav-llaudio/src/codecs/flac.rs @@ -452,7 +452,7 @@ struct FLACPacketiser { fn read_utf8(br: &mut BitReader) -> DecoderResult { let byte = br.read(8)? as u8; let len = (!byte).leading_zeros(); - if (len == 1) || (len > 5) { + if (len == 1) || (len > 7) { return Err(DecoderError::InvalidData); } if len > 1 { diff --git a/nihav-llaudio/src/demuxers/flac.rs b/nihav-llaudio/src/demuxers/flac.rs index 4fb6c4c..bb685b2 100644 --- a/nihav-llaudio/src/demuxers/flac.rs +++ b/nihav-llaudio/src/demuxers/flac.rs @@ -141,8 +141,8 @@ fn read_utf8(src: &[u8]) -> DemuxerResult { return Ok(u32::from(src[0])); } let len = (!src[0]).leading_zeros() as usize; - validate!(len != 1 && len <= 5 && src.len() >= len); - let mut val = u32::from(src[0] & 0x1F); + validate!(len != 1 && len <= 7 && src.len() >= len); + let mut val = u32::from(src[0] << len >> len); for byte in src.iter().take(len).skip(1) { validate!((*byte & 0xC0) == 0x80); val = (val << 6) | u32::from(*byte & 0x3F); -- 2.39.5