From: Mark Date: Wed, 17 Jan 2024 04:50:53 +0000 (-0700) Subject: add better no op detection in char_reader.rs (#2297) X-Git-Tag: v0.9.4~28 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=e3aa85e2a296ff1f16bbb4f75ad197355ddbed37;p=scryer-prolog.git add better no op detection in char_reader.rs (#2297) --- diff --git a/src/parser/char_reader.rs b/src/parser/char_reader.rs index 75e3fef8..aa1813a9 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;