call read_bytes iteratively inside of read_vec (#138)

This commit is contained in:
Ty Overby 2017-03-13 09:24:38 -07:00 committed by GitHub
parent 05d1936caf
commit ed65f9abeb
1 changed files with 2 additions and 3 deletions

View File

@ -58,14 +58,13 @@ impl<R: Read, E: ByteOrder> Deserializer<R, E> {
} }
fn read_vec(&mut self) -> Result<Vec<u8>> { fn read_vec(&mut self) -> Result<Vec<u8>> {
let len = try!(serde::Deserialize::deserialize(&mut *self)); let mut len: usize = try!(serde::Deserialize::deserialize(&mut *self));
try!(self.read_bytes(len));
let mut result = Vec::new(); let mut result = Vec::new();
let mut len = len as usize;
let mut off = 0; let mut off = 0;
while len > 0 { while len > 0 {
let reserve = cmp::min(len, BLOCK_SIZE); let reserve = cmp::min(len, BLOCK_SIZE);
try!(self.read_bytes(reserve as u64));
unsafe { unsafe {
result.reserve(reserve); result.reserve(reserve);
result.set_len(off + reserve); result.set_len(off + reserve);