X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-rad%2Fsrc%2Fcodecs%2Fsmacker.rs;h=7ecd4436b074063c67acd37cc0a98bc7ed6aff90;hb=b8ea95bcd62ebd2a6b58a889c0a2e0e35fa212d3;hp=c1b9fd6cae3270c49165960d10482f6c1573dc68;hpb=886cde4847280b96e10d240c2f2d76abec121dc8;p=nihav.git diff --git a/nihav-rad/src/codecs/smacker.rs b/nihav-rad/src/codecs/smacker.rs index c1b9fd6..7ecd443 100644 --- a/nihav-rad/src/codecs/smacker.rs +++ b/nihav-rad/src/codecs/smacker.rs @@ -94,6 +94,7 @@ const SMK_LAST_UNINIT: usize = 0xFFFFFFFF; impl SmackerTree16Builder { fn get_tree16(&mut self, br: &mut BitReader, tree: &mut SmackerTree16, depth: usize) -> DecoderResult { validate!(tree.tree.len() < self.nsyms); + validate!(depth <= 32); if !br.read_bool()? { let lo = br.read_tree8(&self.tree_lo)?; let hi = br.read_tree8(&self.tree_hi)?; @@ -138,7 +139,7 @@ impl SmackerTree16 { let mut esc: [u32; 3] = [0; 3]; for i in 0..esc.len() { - esc[i] = br.read(16)? as u32; + esc[i] = br.read(16)?; } let nsyms = (((size + 3) >> 2) + 4) as usize; @@ -573,7 +574,7 @@ impl NADecoder for SmackerAudioDecoder { let mut pred: [u8; 2] = [ pred1, pred0 ]; for ch in 0..2 { dst[ch] = pred[ch]; } for i in 2..unp_size { - let diff = br.read_tree8(&trees[i & 1])? as u8; + let diff = br.read_tree8(&trees[i & 1])?; pred[i & 1] = pred[i & 1].wrapping_add(diff); dst[i] = pred[i & 1]; } @@ -583,7 +584,7 @@ impl NADecoder for SmackerAudioDecoder { let mut pred = br.read(8)? as u8; dst[0] = pred; for i in 1..unp_size { - let diff = br.read_tree8(&tree)? as u8; + let diff = br.read_tree8(&tree)?; pred = pred.wrapping_add(diff); dst[i] = pred; }