More robust SHA256 checksum check (ignore asterisk in front of file name on Windows)

This commit is contained in:
Martin Lisowski 2025-01-07 10:59:09 +01:00
parent e09790dae7
commit 5864273e29
2 changed files with 26 additions and 3 deletions

View File

@ -2,6 +2,17 @@ str url #option;
str directoryName #option; str directoryName #option;
str checksum #option; str checksum #option;
// Returns true if file matches given SHA 256 checksum
// Note: using StringStartsWith and StringEndsWith to avoid mismatch due to asterisk in front of file name on MSYS2/Windows
bool FileMatchesSHA256Checksum(str filename, str checksum) {
str shasum = SystemShellEvaluate("shasum -a 256 %filename%");
if StringStartsWith(shasum, checksum) && StringEndsWith(shasum, filename) {
return true;
} else {
return false;
}
}
void Get(str url, str directoryName, str checksum) { void Get(str url, str directoryName, str checksum) {
assert url != ""; assert url != "";
assert directoryName != ""; assert directoryName != "";
@ -42,8 +53,10 @@ void Get(str url, str directoryName, str checksum) {
} }
if checksum != "" { if checksum != "" {
if SystemShellEvaluate("shasum -a 256 %cachePath%") != "%checksum% %cachePath%\n" { if FileMatchesSHA256Checksum(cachePath, checksum) {
LogError("Checksum mismatch for file '%cachePath%'.\n"); LogError("Checksum mismatch for file '%cachePath%'.\n");
SystemShellExecute("shasum -a 256 %cachePath%");
Log("%checksum% is the expected checksum");
PathDelete(cachePath); PathDelete(cachePath);
assert false; assert false;
} }

View File

@ -15,6 +15,17 @@ str compilerPath #persist;
int compilerIndex #persist; int compilerIndex #persist;
bool runningMakefiles #persist; bool runningMakefiles #persist;
// Returns true if file matches given SHA 256 checksum
// Note: using StringStartsWith and StringEndsWith to avoid mismatch due to asterisk in front of file name on MSYS2/Windows
bool FileMatchesSHA256Checksum(str filename, str checksum) {
str shasum = SystemShellEvaluate("shasum -a 256 %filename%");
if StringStartsWith(shasum, checksum) && StringEndsWith(shasum, filename) {
return true;
} else {
return false;
}
}
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
// Environment setup // Environment setup
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
@ -45,8 +56,7 @@ void Setup(bool forAutomation) {
assert false; assert false;
} }
if SystemShellEvaluate("shasum -a 256 util/test.txt") if FileMatchesSHA256Checksum("util/test.txt", "2c5622dbbf2552e0e66424a302bde0918e09379afce47eef1a21ef0198990fed") {
!= "2c5622dbbf2552e0e66424a302bde0918e09379afce47eef1a21ef0198990fed util/test.txt\n" {
Log(TextColorError() + "--------------------------------------------------------------------"); Log(TextColorError() + "--------------------------------------------------------------------");
Log(TextColorError() + " The source has been corrupted!! "); Log(TextColorError() + " The source has been corrupted!! ");
Log(TextColorError() + " Please check that you have disabled any automatic line-ending or "); Log(TextColorError() + " Please check that you have disabled any automatic line-ending or ");