Add second check if read fails unexpectedly

This commit is contained in:
Sharif Haason authored and David Peter committed 2022-11-13 22:15:41 +01:00
1 parent f6a1c4e8e3
commit 5f82942f98
1 file changed
+14 -11
+14 -11
View File
@@ -489,9 +489,12 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
if let Ok(n) = buf.read(&mut self.line_buf) { if let Ok(n) = buf.read(&mut self.line_buf) {
if n > 0 && n < 8 * self.panels as usize { if n > 0 && n < 8 * self.panels as usize {
is_empty = false; is_empty = false;
self.line_buf.resize(n, 0); // perform second check on read
leftover = Some(n); if let Ok(0) = buf.read(&mut self.line_buf[n..]) {
break; self.line_buf.resize(n, 0);
leftover = Some(n);
break;
};
} else if n == 0 { } else if n == 0 {
if self.squeezer == Squeezer::Delete { if self.squeezer == Squeezer::Delete {
self.line_buf.clear(); self.line_buf.clear();
@@ -503,16 +506,16 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
is_empty = false; is_empty = false;
if self.squeezer == Squeezer::Delete && self.squeeze_byte == 0 { if self.squeezer == Squeezer::Delete && self.squeeze_byte == 0 {
for w in self.line_buf.chunks_exact(std::mem::size_of::<usize>()) { if self
if usize::from_ne_bytes(w.try_into().unwrap()) != 0 { .line_buf
self.squeezer = Squeezer::Ignore; .chunks_exact(std::mem::size_of::<usize>())
all_zero = false; .all(|w| usize::from_ne_bytes(w.try_into().unwrap()) == 0)
break; {
}
}
if all_zero {
self.idx += 8 * self.panels; self.idx += 8 * self.panels;
continue; continue;
} else {
self.squeezer = Squeezer::Ignore;
all_zero = false;
} }
} }