chiark / gitweb /
packetframe: Fix EOF handling in chunk header
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 17 Apr 2021 14:25:32 +0000 (15:25 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 23 Apr 2021 18:32:07 +0000 (19:32 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/packetframe.rs

index 5b45feaf713b8b93ac0c1cee958ed16e58309645..98f131f69c4498bd296e55b76e571d084a87838d 100644 (file)
@@ -142,7 +142,19 @@ impl<R:Read> FrameReader<R> {
     assert_ne!(buf.len(), 0);
     let remaining = self.in_frame.as_mut().unwrap();
     if *remaining == 0 {
-      *remaining = match match self.inner.read_u16::<BO>()? {
+      *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::<BO>().unwrap(),
+          _ => panic!(),
+        }
+      } {
         0         => Left(Ok(0)),
         CHUNK_ERR => Left(Err(SenderError)),
         x         => Right(x as usize),