From 2fb5b204d83a3da79dc743fed25f9cad81367a13 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 13 Mar 2021 14:15:39 -0500 Subject: fix a bunch of utf8 parsing issues --- src/blocking/input.rs | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) (limited to 'src/blocking/input.rs') diff --git a/src/blocking/input.rs b/src/blocking/input.rs index b133e7f..7a35f25 100644 --- a/src/blocking/input.rs +++ b/src/blocking/input.rs @@ -180,30 +180,27 @@ impl Input { } fn fill_buf(&mut self) -> Result { - if !self.buf_is_empty() { - return Ok(true); - } - - self.buf.resize(4096, 0); - self.pos = 0; - let bytes = read_stdin(&mut self.buf)?; - if bytes == 0 { - return Ok(false); + if self.buf_is_empty() { + self.buf.resize(4096, 0); + self.pos = 0; + let bytes = read_stdin(&mut self.buf)?; + if bytes == 0 { + return Ok(false); + } + self.buf.truncate(bytes); } - self.buf.truncate(bytes); if self.parse_utf8 { - let mut extra = self.find_truncated_utf8(); - if extra > 0 { + let expected_bytes = self.expected_leading_utf8_bytes(); + if self.buf.len() < self.pos + expected_bytes { let mut cur = self.buf.len(); - self.buf.resize(4096 + extra, 0); - while extra > 0 { + self.buf.resize(4096 + expected_bytes, 0); + while cur < self.pos + expected_bytes { let bytes = read_stdin(&mut self.buf[cur..])?; if bytes == 0 { return Ok(false); } cur += bytes; - extra = extra.saturating_sub(bytes); } self.buf.truncate(cur); } -- cgit v1.2.3-54-g00ecf