X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Fio%2Fbitreader.rs;h=c4f9f6c8a3490edeccb1ed4385e495f15ee940a7;hb=353373a32fcbf842efb6fb11462b5c757b0d382e;hp=6c786228c1ecf9465e387f27ab6516e7c406891d;hpb=155c91e4c10925336ede2c40d87f54b9234b590a;p=nihav.git diff --git a/nihav-core/src/io/bitreader.rs b/nihav-core/src/io/bitreader.rs index 6c78622..c4f9f6c 100644 --- a/nihav-core/src/io/bitreader.rs +++ b/nihav-core/src/io/bitreader.rs @@ -90,6 +90,9 @@ impl<'a> BitReader<'a> { BitReader{ cache: 0, pos: 0, bits: 0, src, mode } } + /// Returns the data bitstream reader uses. + pub fn get_data(&self) -> &'a [u8] { self.src } + /// Reports the current bit position in the bitstream (usually simply the number of bits read so far). pub fn tell(&self) -> usize { self.pos * 8 - (self.bits as usize) @@ -302,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(())