mirror of
https://github.com/velopack/velopack.git
synced 2025-10-25 15:19:22 +00:00
Fix tests and add size validation to rust
This commit is contained in:
@@ -235,20 +235,14 @@ namespace Velopack
|
||||
|
||||
var completeFile = Locator.GetLocalPackagePath(targetRelease);
|
||||
var incompleteFile = completeFile + ".partial";
|
||||
|
||||
// if the package already exists on disk, we can skip the download.
|
||||
if (File.Exists(completeFile)) {
|
||||
Log.Info($"Package already exists on disk: '{completeFile}', nothing to do.");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// if the package already exists on disk, we can skip the download.
|
||||
if (File.Exists(completeFile)) {
|
||||
Log.Info($"Package already exists on disk: '{completeFile}', verifying checksum...");
|
||||
try {
|
||||
VerifyPackageChecksum(targetRelease, completeFile);
|
||||
Log.Info("Package checksum verified, skipping download.");
|
||||
return;
|
||||
} catch (ChecksumFailedException ex) {
|
||||
Log.Warn(ex, $"Checksum failed for file '{completeFile}'. Deleting and starting over.");
|
||||
}
|
||||
}
|
||||
|
||||
var deltasSize = updates.DeltasToTarget.Sum(x => x.Size);
|
||||
var deltasCount = updates.DeltasToTarget.Count();
|
||||
|
||||
|
||||
@@ -127,8 +127,10 @@ pub enum Error
|
||||
FileNotFound(String),
|
||||
#[error("IO error: {0}")]
|
||||
Io(#[from] std::io::Error),
|
||||
#[error("Checusum did not match for {0} (expected {1}, actual {2})")]
|
||||
Checksum(String, String, String),
|
||||
#[error("Checksum did not match for {0} (expected {1}, actual {2})")]
|
||||
ChecksumInvalid(String, String, String),
|
||||
#[error("Size did not match for {0} (expected {1}, actual {2})")]
|
||||
SizeInvalid(String, u64, u64),
|
||||
#[error("Zip error: {0}")]
|
||||
Zip(#[from] zip::result::ZipError),
|
||||
#[error("Network error: {0}")]
|
||||
|
||||
@@ -519,10 +519,16 @@ impl UpdateManager {
|
||||
}
|
||||
|
||||
fn verify_package_checksum(&self, file: &PathBuf, asset: &VelopackAsset) -> Result<(), Error> {
|
||||
let file_size = file.metadata()?.len();
|
||||
if file_size != asset.Size {
|
||||
error!("File size mismatch for file '{}': expected {}, got {}", file.to_string_lossy(), asset.Size, file_size);
|
||||
return Err(Error::SizeInvalid(file.to_string_lossy().to_string(), asset.Size, file_size));
|
||||
}
|
||||
|
||||
let sha1 = util::calculate_file_sha1(file)?;
|
||||
if !sha1.eq_ignore_ascii_case(&asset.SHA1) {
|
||||
error!("SHA1 checksum mismatch for file '{}': expected '{}', got '{}'", file.to_string_lossy(), asset.SHA1, sha1);
|
||||
return Err(Error::Checksum(file.to_string_lossy().to_string(), asset.SHA1.clone(), sha1));
|
||||
return Err(Error::ChecksumInvalid(file.to_string_lossy().to_string(), asset.SHA1.clone(), sha1));
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user