]> git.nihav.org Git - nihav.git/commitdiff
flac: update UTF-8 reader code to handle a larger range
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 11 Jan 2025 15:39:58 +0000 (16:39 +0100)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 11 Jan 2025 15:39:58 +0000 (16:39 +0100)
nihav-llaudio/src/codecs/flac.rs
nihav-llaudio/src/demuxers/flac.rs

index 6ebc78d2d80e0d8422cffd958b36ec6999fdc49a..c1142b15de4ebbd6d7ac7a99e9279e17c1d3b340 100644 (file)
@@ -452,7 +452,7 @@ struct FLACPacketiser {
 fn read_utf8(br: &mut BitReader) -> DecoderResult<u64> {
     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 {
index 4fb6c4c144b45b4125fb4ca004e3d1d8bec8f328..bb685b2d062f3d66c08128ee4ea7b295f0e4485a 100644 (file)
@@ -141,8 +141,8 @@ fn read_utf8(src: &[u8]) -> DemuxerResult<u32> {
         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);