From e3aa85e2a296ff1f16bbb4f75ad197355ddbed37 Mon Sep 17 00:00:00 2001 From: Mark Date: Tue, 16 Jan 2024 21:50:53 -0700 Subject: [PATCH] add better no op detection in char_reader.rs (#2297) --- src/parser/char_reader.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/parser/char_reader.rs b/src/parser/char_reader.rs index 75e3fef83..aa1813a9d 100644 --- a/src/parser/char_reader.rs +++ b/src/parser/char_reader.rs @@ -191,7 +191,7 @@ impl CharRead for CharReader { return Some(Err(bad_bytes_error(buf))); } else if self.pos >= self.buf.len() { return None; - } else if self.buf.len() - self.pos >= 4 { + } else if self.buf.len() - self.pos >= 4 && self.pos < e.valid_up_to() { return match str::from_utf8(&self.buf[self.pos..e.valid_up_to()]) { Ok(s) => { let mut chars = s.chars(); @@ -218,6 +218,11 @@ impl CharRead for CharReader { self.buf.truncate(buf_len - self.pos); let buf_len = self.buf.len(); + self.pos = 0; + + if buf_len >= 4 { + continue; + } let mut word = [0u8; 4]; let word_slice = &mut word[buf_len..4]; @@ -229,8 +234,6 @@ impl CharRead for CharReader { self.buf.extend_from_slice(&word_slice[0..nread]); } } - - self.pos = 0; } } else { return None;