From 97dab7cc35b26485459d3c65626e1e391a80767e Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 17 Apr 2021 15:25:32 +0100 Subject: [PATCH] packetframe: Fix EOF handling in chunk header Signed-off-by: Ian Jackson --- src/packetframe.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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), -- 2.30.2