X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fio%2Fbitreader.rs;h=b5f8de61cb8db863c0f2b09c00327b93e40507b6;hb=e6aaad5c5273cd814b5748b7faf3751835a37217;hp=569330b5be59e14ab75612c14462ba18832dec0a;hpb=bebc390bcfe51ffa0509a69bf1acfa7cccde5d7b;p=nihav.git diff --git a/nihav-core/src/io/bitreader.rs b/nihav-core/src/io/bitreader.rs index 569330b..b5f8de6 100644 --- a/nihav-core/src/io/bitreader.rs +++ b/nihav-core/src/io/bitreader.rs @@ -227,7 +227,7 @@ impl<'a> BitReader<'a> { if nbits == 0 { return Ok(0) } if nbits > 32 { return Err(TooManyBitsRequested) } if self.bits < nbits { - if let Err(err) = self.refill() { return Err(err) } + self.refill()?; if self.bits < nbits { return Err(BitstreamEnd) } } let res = self.read_cache(nbits); @@ -243,7 +243,7 @@ impl<'a> BitReader<'a> { pub fn read_s(&mut self, nbits: u8) -> BitReaderResult { if nbits == 0 || nbits > 32 { return Err(TooManyBitsRequested) } if self.bits < nbits { - if let Err(err) = self.refill() { return Err(err) } + self.refill()?; if self.bits < nbits { return Err(BitstreamEnd) } } let res = self.read_cache_s(nbits); @@ -255,7 +255,7 @@ impl<'a> BitReader<'a> { #[inline(always)] pub fn read_bool(&mut self) -> BitReaderResult { if self.bits < 1 { - if let Err(err) = self.refill() { return Err(err) } + self.refill()?; if self.bits < 1 { return Err(BitstreamEnd) } } let res = self.read_cache(1); @@ -305,8 +305,11 @@ impl<'a> BitReader<'a> { self.reset_cache(); self.pos += ((skip_bits / 32) * 4) as usize; skip_bits &= 0x1F; - self.refill()?; if skip_bits > 0 { + self.refill()?; + if u32::from(self.bits) < skip_bits { + return Err(BitstreamEnd); + } self.skip_cache(skip_bits as u8); } Ok(())