local_backend: don't reference uninitialized memory

This commit is contained in:
Benjamin Saunders 2023-08-08 12:41:11 -07:00
parent fa758893cf
commit 75636d626f

View file

@ -141,19 +141,15 @@ impl Backend for LocalBackend {
let temp_file = NamedTempFile::new_in(&self.path).map_err(to_other_err)?; let temp_file = NamedTempFile::new_in(&self.path).map_err(to_other_err)?;
let mut encoder = zstd::Encoder::new(temp_file.as_file(), 0).map_err(to_other_err)?; let mut encoder = zstd::Encoder::new(temp_file.as_file(), 0).map_err(to_other_err)?;
let mut hasher = Blake2b512::new(); let mut hasher = Blake2b512::new();
let mut buff: Vec<u8> = vec![0; 1 << 14];
loop { loop {
let mut buff: Vec<u8> = Vec::with_capacity(1 << 14); let bytes_read = contents.read(&mut buff).map_err(to_other_err)?;
let bytes_read;
unsafe {
buff.set_len(1 << 14);
bytes_read = contents.read(&mut buff).map_err(to_other_err)?;
buff.set_len(bytes_read);
}
if bytes_read == 0 { if bytes_read == 0 {
break; break;
} }
encoder.write_all(&buff).map_err(to_other_err)?; let bytes = &buff[..bytes_read];
hasher.update(&buff); encoder.write_all(bytes).map_err(to_other_err)?;
hasher.update(bytes);
} }
encoder.finish().map_err(to_other_err)?; encoder.finish().map_err(to_other_err)?;
let id = FileId::new(hasher.finalize().to_vec()); let id = FileId::new(hasher.finalize().to_vec());