src/api2/backup/upload_chunk.rs: compute crc on upload

This commit is contained in:
Dietmar Maurer 2019-06-23 09:04:42 +02:00
parent ba01828d38
commit 6f083b7a92
2 changed files with 7 additions and 4 deletions

View File

@ -53,10 +53,13 @@ impl Future for UploadChunk {
bail!("uploaded chunk has unexpected size."); bail!("uploaded chunk has unexpected size.");
} }
let chunk = DataChunk::from_raw(raw_data, self.digest)?; let mut chunk = DataChunk::from_raw(raw_data, self.digest)?;
chunk.verify_unencrypted(self.size as usize)?; chunk.verify_unencrypted(self.size as usize)?;
// always comput CRC at server side
chunk.set_crc(chunk.compute_crc());
let (is_duplicate, compressed_size) = self.store.insert_chunk(&chunk)?; let (is_duplicate, compressed_size) = self.store.insert_chunk(&chunk)?;
return Ok(Async::Ready((self.digest, self.size, compressed_size as u32, is_duplicate))) return Ok(Async::Ready((self.digest, self.size, compressed_size as u32, is_duplicate)))

View File

@ -54,7 +54,7 @@ impl DataChunk {
} }
/// compute the CRC32 checksum /// compute the CRC32 checksum
pub fn compute_crc(&mut self) -> u32 { pub fn compute_crc(&self) -> u32 {
let mut hasher = crc32fast::Hasher::new(); let mut hasher = crc32fast::Hasher::new();
let start = std::mem::size_of::<DataChunkHeader>(); // start after HEAD let start = std::mem::size_of::<DataChunkHeader>(); // start after HEAD
hasher.update(&self.raw_data[start..]); hasher.update(&self.raw_data[start..]);
@ -230,8 +230,8 @@ impl DataChunk {
}; };
if magic == &COMPRESSED_CHUNK_MAGIC_1_0 { if magic == &COMPRESSED_CHUNK_MAGIC_1_0 {
let data = zstd::block::decompress(&self.raw_data[12..], 16*1024*1024)?; let data = zstd::block::decompress(&self.raw_data[12..], 16*1024*1024)?;
verify_raw_data(&data)?; verify_raw_data(&data)?;
} else if magic == &UNCOMPRESSED_CHUNK_MAGIC_1_0 { } else if magic == &UNCOMPRESSED_CHUNK_MAGIC_1_0 {
verify_raw_data(&self.raw_data[12..])?; verify_raw_data(&self.raw_data[12..])?;
} }