mirror of
https://codeberg.org/icewind/bitbuffer.git
synced 2026-06-03 16:44:06 +02:00
fix Utf8Error::length going out of bounds of sub-buffers
This commit is contained in:
parent
9a4b300875
commit
8066984763
1 changed files with 14 additions and 10 deletions
|
|
@ -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
|
||||||
})?;
|
})?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue