diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2018-11-08 08:47:10 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-08 08:47:10 -0500 |
commit | dd5e5e9294e51e8cbbbcd6affa54e954701a7d2e (patch) | |
tree | 2016748480fab8bb958741a41d19b9e974657bc4 | |
parent | 0a11e10a0ffaaddfc4baed9e5b22891fdab7588c (diff) | |
parent | 85c6eff94a7c1266fddd78ce12e7632db1b8a2ac (diff) | |
download | servo-dd5e5e9294e51e8cbbbcd6affa54e954701a7d2e.tar.gz servo-dd5e5e9294e51e8cbbbcd6affa54e954701a7d2e.zip |
Auto merge of #22144 - Eijebong:hyperfix, r=jdm
Fix downloading huge files (broken since hyperup)
<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22144)
<!-- Reviewable:end -->
-rw-r--r-- | components/net/connector.rs | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/components/net/connector.rs b/components/net/connector.rs index de9f9b2e087..452b0db703d 100644 --- a/components/net/connector.rs +++ b/components/net/connector.rs @@ -81,7 +81,7 @@ impl Stream for WrappedBody { Decoder::Plain => Some(chunk), Decoder::Gzip(Some(ref mut decoder)) => { let mut buf = vec![0; BUF_SIZE]; - *decoder.get_mut() = Cursor::new(chunk.into_bytes()); + decoder.get_mut().get_mut().extend(chunk.as_ref()); let len = decoder.read(&mut buf).ok()?; buf.truncate(len); Some(buf.into()) @@ -96,21 +96,51 @@ impl Stream for WrappedBody { }, Decoder::Deflate(ref mut decoder) => { let mut buf = vec![0; BUF_SIZE]; - *decoder.get_mut() = Cursor::new(chunk.into_bytes()); + decoder.get_mut().get_mut().extend(chunk.as_ref()); let len = decoder.read(&mut buf).ok()?; buf.truncate(len); Some(buf.into()) }, Decoder::Brotli(ref mut decoder) => { let mut buf = vec![0; BUF_SIZE]; - decoder.get_mut().get_mut().extend(&chunk.into_bytes()); + decoder.get_mut().get_mut().extend(chunk.as_ref()); let len = decoder.read(&mut buf).ok()?; buf.truncate(len); Some(buf.into()) }, } } else { - None + // Hyper is done downloading but we still have uncompressed data + match self.decoder { + Decoder::Gzip(Some(ref mut decoder)) => { + let mut buf = vec![0; BUF_SIZE]; + let len = decoder.read(&mut buf).ok()?; + if len == 0 { + return None; + } + buf.truncate(len); + Some(buf.into()) + }, + Decoder::Deflate(ref mut decoder) => { + let mut buf = vec![0; BUF_SIZE]; + let len = decoder.read(&mut buf).ok()?; + if len == 0 { + return None; + } + buf.truncate(len); + Some(buf.into()) + }, + Decoder::Brotli(ref mut decoder) => { + let mut buf = vec![0; BUF_SIZE]; + let len = decoder.read(&mut buf).ok()?; + if len == 0 { + return None; + } + buf.truncate(len); + Some(buf.into()) + }, + _ => None, + } } }) }) |