chiark / gitweb /
packetframe: Fix EOF handling in chunk data
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 17 Apr 2021 18:03:39 +0000 (19:03 +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 2c9ae2d3fe7ac1cf670e699d3893d1bfc785fbe3..6259cc79e88f6c26301af31414795756092c956b 100644 (file)
@@ -139,6 +139,7 @@ impl<R:Read> FrameReader<R> {
   fn do_read(&mut self, buf: &mut [u8]) ->
     Result<Result<usize, SenderError>, 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<R:Read> FrameReader<R> {
           &mut q,
         )? {
           0 => return Ok(Ok(0)),
-          1 => return Err(io::ErrorKind::UnexpectedEof.into()),
+          1 => return badeof(),
           2 => (&lbuf[..]).read_u16::<BO>().unwrap(),
           _ => panic!(),
         }
@@ -168,6 +169,7 @@ impl<R:Read> FrameReader<R> {
     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))