Mercurial > trustbridge
diff ui/main.cpp @ 631:edf269b6e499
Add self test as first opertation on start
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 23 Jun 2014 13:05:08 +0200 |
parents | 2ea11a95aa4a |
children | 6c090638b2b4 |
line wrap: on
line diff
--- a/ui/main.cpp Mon Jun 23 13:04:50 2014 +0200 +++ b/ui/main.cpp Mon Jun 23 13:05:08 2014 +0200 @@ -7,6 +7,9 @@ */ #include "mainwindow.h" #include "processhelp.h" +#include "binverify.h" +#include "logging.h" +#include "strhelp.h" #include <QApplication> #include <QSystemTrayIcon> @@ -36,6 +39,54 @@ int main(int argc, char **argv) { + /* First verify integrity even before calling QApplication*/ +#ifdef Q_OS_WIN + DWORD sizeNeeded = GetModuleFileNameW (NULL, NULL, 0); + wchar_t wPath[sizeNeeded + 1]; + char *utf8path = NULL; + + if (sizeNeeded == 0) { + PRINTLASTERROR ("Failed to obtain module file name"); + syslog_error_printf ("Integrity check failed."); + return -1; + } + + DWORD realSize = GetModuleFileNameW (NULL, wPath, sizeNeeded + 1); + + if (realSize != sizeNeeded) { + ERRORPRINTF ("Module name changed"); + syslog_error_printf ("Integrity check failed."); + return -1; + } + + utf8path = wchar_to_utf8 (wPath, sizeNeeded + 1); + + if (utf8path == NULL) { + ERRORPRINTF ("Failed to convert module path to utf-8"); + syslog_error_printf ("Integrity check failed."); + return -1; + } + + if (!verify_binary (utf8path, strlen(utf8path)) != VerifyValid) + { + syslog_error_printf ("Integrity check failed."); + xfree(utf8path); +#ifdef RELEASE_BUILD + return -1; +#endif + } + + xfree(utf8path); +#else + if (!verify_binary ("/proc/self/exe", 14) != VerifyValid) + { + syslog_error_printf ("Integrity check failed."); +#ifdef RELEASE_BUILD + return -1; +#endif + } +#endif + QApplication app (argc, argv); QApplication::setQuitOnLastWindowClosed(false);