diff --git a/src/client/parser.rs b/src/client/parser.rs index e0c494066..6feb0cc78 100644 --- a/src/client/parser.rs +++ b/src/client/parser.rs @@ -81,16 +81,11 @@ impl HttpResponseParser { if self.decoder.is_some() { loop { // read payload - let not_ready = match utils::read_from_io(io, buf) { - Ok(Async::Ready(0)) => { - if buf.is_empty() { - return Err(PayloadError::Incomplete) - } - true - } + let (not_ready, stream_finished) = match utils::read_from_io(io, buf) { + Ok(Async::Ready(0)) => (false, true), Err(err) => return Err(err.into()), - Ok(Async::NotReady) => true, - _ => false, + Ok(Async::NotReady) => (true, false), + _ => (false, false), }; match self.decoder.as_mut().unwrap().decode(buf) { @@ -104,6 +99,9 @@ impl HttpResponseParser { if not_ready { return Ok(Async::NotReady) } + if stream_finished { + return Err(PayloadError::Incomplete) + } } Err(err) => return Err(err.into()), }