From: Ian Jackson Date: Sat, 17 Apr 2021 18:03:39 +0000 (+0100) Subject: packetframe: Fix EOF handling in chunk data X-Git-Tag: otter-0.6.0~550 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=9bc3736df124d294af153136f53950bbf8b7bcdf;p=otter.git packetframe: Fix EOF handling in chunk data Signed-off-by: Ian Jackson --- 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))