From: Ian Jackson Date: Sat, 17 Apr 2021 14:25:32 +0000 (+0100) Subject: packetframe: Fix EOF handling in chunk header X-Git-Tag: otter-0.6.0~553 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=97dab7cc35b26485459d3c65626e1e391a80767e;p=otter.git packetframe: Fix EOF handling in chunk header Signed-off-by: Ian Jackson --- diff --git a/src/packetframe.rs b/src/packetframe.rs index 5b45feaf..98f131f6 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -142,7 +142,19 @@ impl FrameReader { assert_ne!(buf.len(), 0); let remaining = self.in_frame.as_mut().unwrap(); if *remaining == 0 { - *remaining = match match self.inner.read_u16::()? { + *remaining = match match { + let mut lbuf = [0u8;2]; + let mut q = &mut lbuf[..]; + match io::copy( + &mut (&mut self.inner).take(2), + &mut q, + )? { + 0 => return Ok(Ok(0)), + 1 => return Err(io::ErrorKind::UnexpectedEof.into()), + 2 => (&lbuf[..]).read_u16::().unwrap(), + _ => panic!(), + } + } { 0 => Left(Ok(0)), CHUNK_ERR => Left(Err(SenderError)), x => Right(x as usize),