Merge pull request #193 from image-rs/issue-192-desync-packbits
Fix read in packbits decoder
This commit is contained in:
1 file changed
+7
-7
@@ -332,23 +332,23 @@ impl<R: Read> Read for PackBitsReader<R> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let length = buf.len().min(self.count);
|
let length = buf.len().min(self.count);
|
||||||
match self.state {
|
let actual = match self.state {
|
||||||
PackBitsReaderState::Literal => {
|
PackBitsReaderState::Literal => self.reader.read(&mut buf[..length])?,
|
||||||
self.reader.read(&mut buf[..length])?;
|
|
||||||
}
|
|
||||||
PackBitsReaderState::Repeat { value } => {
|
PackBitsReaderState::Repeat { value } => {
|
||||||
for b in &mut buf[..length] {
|
for b in &mut buf[..length] {
|
||||||
*b = value;
|
*b = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
length
|
||||||
}
|
}
|
||||||
PackBitsReaderState::Header => unreachable!(),
|
PackBitsReaderState::Header => unreachable!(),
|
||||||
}
|
};
|
||||||
|
|
||||||
self.count -= length;
|
self.count -= actual;
|
||||||
if self.count == 0 {
|
if self.count == 0 {
|
||||||
self.state = PackBitsReaderState::Header;
|
self.state = PackBitsReaderState::Header;
|
||||||
}
|
}
|
||||||
return Ok(length);
|
return Ok(actual);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user