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,16 +304,20 @@ 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
// still advance the stream on malformed utf8 .buffer
if let BitError::Utf8Error(_, len) = &err { .read_string(self.pos, byte_len)
self.pos += match byte_len { .map_err(|mut err| {
Some(len) => len * 8, // still advance the stream on malformed utf8
None => min((len + 1) * 8, max_length * 8), if let BitError::Utf8Error(_, len) = &mut err {
}; self.pos += match byte_len {
} Some(len) => len * 8,
err None => min((*len + 1) * 8, max_length * 8),
})?; };
*len = (*len).min(max_length);
}
err
})?;
let read = match byte_len { let read = match byte_len {
Some(len) => len * 8, Some(len) => len * 8,
None => (result.len() + 1) * 8, None => (result.len() + 1) * 8,