diff --git a/src/api2/admin/datastore.rs b/src/api2/admin/datastore.rs index 2e929ac1..aa476d43 100644 --- a/src/api2/admin/datastore.rs +++ b/src/api2/admin/datastore.rs @@ -539,9 +539,9 @@ fn upload_backup_log( Ok::<_, Error>(acc) }) .and_then(move |data| { - let mut blob = DataBlob::from_raw(data)?; - // always comput CRC at server side - blob.set_crc(blob.compute_crc()); + let blob = DataBlob::from_raw(data)?; + // always verify CRC at server side + blob.verify_crc()?; let raw_data = blob.raw_data(); file_set_contents(&path, raw_data, None)?; Ok(()) diff --git a/src/backup/data_blob.rs b/src/backup/data_blob.rs index c50af748..2263f83b 100644 --- a/src/backup/data_blob.rs +++ b/src/backup/data_blob.rs @@ -73,7 +73,7 @@ impl DataBlob { bail!("data blob too large ({} bytes).", data.len()); } - if let Some(config) = config { + let mut blob = if let Some(config) = config { let compr_data; let (_compress, data, magic) = if compress { @@ -110,7 +110,7 @@ impl DataBlob { (&mut raw_data[0..header_len]).write_le_value(head)?; } - return Ok(DataBlob { raw_data }); + DataBlob { raw_data } } else { let max_data_len = data.len() + std::mem::size_of::(); @@ -143,8 +143,12 @@ impl DataBlob { } raw_data.extend_from_slice(data); - return Ok(DataBlob { raw_data }); - } + DataBlob { raw_data } + }; + + blob.set_crc(blob.compute_crc()); + + Ok(blob) } /// Decode blob data @@ -238,7 +242,10 @@ impl DataBlob { } raw_data.extend_from_slice(data); - return Ok(DataBlob { raw_data }); + let mut blob = DataBlob { raw_data }; + blob.set_crc(blob.compute_crc()); + + return Ok(blob); } /// Create Instance from raw data