mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
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 -->
This commit is contained in:
commit
dd5e5e9294
1 changed files with 34 additions and 4 deletions
|
@ -81,7 +81,7 @@ impl Stream for WrappedBody {
|
||||||
Decoder::Plain => Some(chunk),
|
Decoder::Plain => Some(chunk),
|
||||||
Decoder::Gzip(Some(ref mut decoder)) => {
|
Decoder::Gzip(Some(ref mut decoder)) => {
|
||||||
let mut buf = vec![0; BUF_SIZE];
|
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()?;
|
let len = decoder.read(&mut buf).ok()?;
|
||||||
buf.truncate(len);
|
buf.truncate(len);
|
||||||
Some(buf.into())
|
Some(buf.into())
|
||||||
|
@ -96,21 +96,51 @@ impl Stream for WrappedBody {
|
||||||
},
|
},
|
||||||
Decoder::Deflate(ref mut decoder) => {
|
Decoder::Deflate(ref mut decoder) => {
|
||||||
let mut buf = vec![0; BUF_SIZE];
|
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()?;
|
let len = decoder.read(&mut buf).ok()?;
|
||||||
buf.truncate(len);
|
buf.truncate(len);
|
||||||
Some(buf.into())
|
Some(buf.into())
|
||||||
},
|
},
|
||||||
Decoder::Brotli(ref mut decoder) => {
|
Decoder::Brotli(ref mut decoder) => {
|
||||||
let mut buf = vec![0; BUF_SIZE];
|
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()?;
|
let len = decoder.read(&mut buf).ok()?;
|
||||||
buf.truncate(len);
|
buf.truncate(len);
|
||||||
Some(buf.into())
|
Some(buf.into())
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else {
|
} 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,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue