1
0
Fork 0
mirror of https://codeberg.org/icewind/bitbuffer.git synced 2026-06-03 08:34:07 +02:00

fix Utf8Error::length going out of bounds of sub-buffers

This commit is contained in:
Robin Appelman 2022-08-06 15:58:12 +02:00
commit 8066984763

View file

@ -304,13 +304,17 @@ where
pub fn read_string(&mut self, byte_len: Option<usize>) -> Result<Cow<'a, str>> { pub fn read_string(&mut self, byte_len: Option<usize>) -> Result<Cow<'a, str>> {
let max_length = self.bits_left() / 8; let max_length = self.bits_left() / 8;
let result = self.buffer.read_string(self.pos, byte_len).map_err(|err| { let result = self
.buffer
.read_string(self.pos, byte_len)
.map_err(|mut err| {
// still advance the stream on malformed utf8 // still advance the stream on malformed utf8
if let BitError::Utf8Error(_, len) = &err { if let BitError::Utf8Error(_, len) = &mut err {
self.pos += match byte_len { self.pos += match byte_len {
Some(len) => len * 8, Some(len) => len * 8,
None => min((len + 1) * 8, max_length * 8), None => min((*len + 1) * 8, max_length * 8),
}; };
*len = (*len).min(max_length);
} }
err err
})?; })?;