From 9bc3736df124d294af153136f53950bbf8b7bcdf Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 17 Apr 2021 19:03:39 +0100 Subject: [PATCH] packetframe: Fix EOF handling in chunk data Signed-off-by: Ian Jackson --- src/packetframe.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/packetframe.rs b/src/packetframe.rs index 2c9ae2d3..6259cc79 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -139,6 +139,7 @@ impl FrameReader { fn do_read(&mut self, buf: &mut [u8]) -> Result, io::Error> { + let badeof = || Err(io::ErrorKind::UnexpectedEof.into()); assert_ne!(buf.len(), 0); let remaining = self.in_frame.as_mut().unwrap(); if *remaining == 0 { @@ -150,7 +151,7 @@ impl FrameReader { &mut q, )? { 0 => return Ok(Ok(0)), - 1 => return Err(io::ErrorKind::UnexpectedEof.into()), + 1 => return badeof(), 2 => (&lbuf[..]).read_u16::().unwrap(), _ => panic!(), } @@ -168,6 +169,7 @@ impl FrameReader { let n = min(buf.len(), *remaining); let r = self.inner.read(&mut buf[0..n])?; assert!(r <= n); + if r == 0 { return badeof(); } *remaining -= r; //dbgc!(r, self.in_frame); Ok(Ok(r)) -- 2.30.2