1
0
mirror of https://github.com/actix/actix-extras.git synced 2024-12-01 02:44:37 +01:00

Merge pull request #173 from jannic/pr

fix end-of-stream handling in parse_payload
This commit is contained in:
Nikolay Kim 2018-04-12 09:30:26 -07:00 committed by GitHub
commit 7295846426
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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