diff options
Diffstat (limited to 'src/Setup')
-rw-r--r-- | src/Setup/SelfExtract.c | 9 | ||||
-rw-r--r-- | src/Setup/Setup.c | 15 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/Setup/SelfExtract.c b/src/Setup/SelfExtract.c index 9bae2119..7b3fb4fe 100644 --- a/src/Setup/SelfExtract.c +++ b/src/Setup/SelfExtract.c @@ -396,6 +396,15 @@ BOOL VerifyPackageIntegrity (void) GetModuleFileName (NULL, path, ARRAYSIZE (path)); +#ifdef NDEBUG + // verify Authenticode digital signature of the exe file + if (!VerifyModuleSignature (path)) + { + Error ("DIST_PACKAGE_CORRUPTED", NULL); + return FALSE; + } +#endif + fileDataEndPos = (int) FindStringInFile (path, MagEndMarker, strlen (MagEndMarker)); if (fileDataEndPos < 0) { diff --git a/src/Setup/Setup.c b/src/Setup/Setup.c index a1f27f41..cedd9f61 100644 --- a/src/Setup/Setup.c +++ b/src/Setup/Setup.c @@ -1051,7 +1051,7 @@ err: FindClose (h); } - + SetCurrentDirectory (SetupFilesDir); } @@ -2571,7 +2571,18 @@ int WINAPI wWinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, wchar_t *lpsz #ifndef PORTABLE SetInstallationPath (NULL); #endif - if (!bUninstall) + if (bUninstall) + { + wchar_t path [TC_MAX_PATH]; + + GetModuleFileName (NULL, path, ARRAYSIZE (path)); + if (!VerifyModuleSignature (path)) + { + Error ("DIST_PACKAGE_CORRUPTED", NULL); + exit (1); + } + } + else { if (IsSelfExtractingPackage()) { |