aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKostya Shishkov <kostya.shishkov@gmail.com>2020-04-26 14:14:31 +0200
committerKostya Shishkov <kostya.shishkov@gmail.com>2020-04-26 14:14:31 +0200
commit0bbe433e917f4253df8536bf5e583b07f71bf6c0 (patch)
tree8bb95d66d8174b630b0649b9267392b07e007845
parentfcc25d82096224ba0ba4c8b800038234fbeb82a9 (diff)
downloadnihav-0bbe433e917f4253df8536bf5e583b07f71bf6c0.tar.gz
core/io: fix reading escape bits past end in codebook
-rw-r--r--nihav-core/src/io/codebook.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/nihav-core/src/io/codebook.rs b/nihav-core/src/io/codebook.rs
index 553f2f9..d835ce3 100644
--- a/nihav-core/src/io/codebook.rs
+++ b/nihav-core/src/io/codebook.rs
@@ -370,10 +370,10 @@ impl<'a, S: Copy> CodebookReader<S> for BitReader<'a> {
let bits = cb.table[lut_idx] & 0x7F;
esc = (cb.table[lut_idx] & 0x80) != 0;
idx = (cb.table[lut_idx] >> 8) as usize;
- if (bits as isize) > self.left() {
+ let skip_bits = if esc { u32::from(lut_bits) } else { bits };
+ if (skip_bits as isize) > self.left() {
return Err(CodebookError::InvalidCode);
}
- let skip_bits = if esc { u32::from(lut_bits) } else { bits };
self.skip(skip_bits as u32).unwrap();
lut_bits = bits as u8;
}