mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-11 02:58:02 -06:00
Static Code Analysis : fix resource leakage by ensuring that all Windows handles are released properly
This commit is contained in:
@@ -1349,7 +1349,7 @@ HBITMAP RenderBitmap (char *resource, HWND hwndDest, int x, int y, int nWidth, i
|
|||||||
HDC hdcDest = GetDC (hwndDest);
|
HDC hdcDest = GetDC (hwndDest);
|
||||||
|
|
||||||
BitBlt (hdcDest, x, y, nWidth, nHeight, hdcRescaled, 0, 0, SRCCOPY);
|
BitBlt (hdcDest, x, y, nWidth, nHeight, hdcRescaled, 0, 0, SRCCOPY);
|
||||||
DeleteDC (hdcDest);
|
ReleaseDC (hwndDest, hdcDest);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -3492,6 +3492,8 @@ load:
|
|||||||
|
|
||||||
bPortableModeConfirmed = TRUE;
|
bPortableModeConfirmed = TRUE;
|
||||||
|
|
||||||
|
if (hDriver != INVALID_HANDLE_VALUE)
|
||||||
|
CloseHandle (hDriver);
|
||||||
hDriver = CreateFile (WIN32_ROOT_PREFIX, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
hDriver = CreateFile (WIN32_ROOT_PREFIX, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7484,16 +7486,19 @@ __int64 GetFileSize64 (const char *path)
|
|||||||
{
|
{
|
||||||
HANDLE h = CreateFile (path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
HANDLE h = CreateFile (path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
||||||
LARGE_INTEGER size;
|
LARGE_INTEGER size;
|
||||||
|
__int64 retSize = -1;
|
||||||
|
|
||||||
if (h == INVALID_HANDLE_VALUE)
|
if (h)
|
||||||
return -1;
|
{
|
||||||
|
if (GetFileSizeEx (h, &size))
|
||||||
|
{
|
||||||
|
retSize = size.QuadPart;
|
||||||
|
}
|
||||||
|
|
||||||
if (GetFileSizeEx (h, &size) == 0)
|
CloseHandle (h);
|
||||||
return -1;
|
}
|
||||||
|
|
||||||
CloseHandle (h);
|
return retSize;
|
||||||
|
|
||||||
return size.QuadPart;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -8214,12 +8219,19 @@ BOOL RestartComputer (void)
|
|||||||
|
|
||||||
AdjustTokenPrivileges (hTkn, false, &tokenPrivil, 0, (PTOKEN_PRIVILEGES) NULL, 0);
|
AdjustTokenPrivileges (hTkn, false, &tokenPrivil, 0, (PTOKEN_PRIVILEGES) NULL, 0);
|
||||||
if (GetLastError() != ERROR_SUCCESS)
|
if (GetLastError() != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
CloseHandle(hTkn);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!ExitWindowsEx (EWX_REBOOT,
|
if (!ExitWindowsEx (EWX_REBOOT,
|
||||||
SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED))
|
SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED))
|
||||||
|
{
|
||||||
|
CloseHandle(hTkn);
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle(hTkn);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7001,7 +7001,11 @@ BOOL TaskBarIconAdd (HWND hwnd)
|
|||||||
TaskBarIconMutex = CreateMutex (NULL, TRUE, "VeraCryptTaskBarIcon");
|
TaskBarIconMutex = CreateMutex (NULL, TRUE, "VeraCryptTaskBarIcon");
|
||||||
if (TaskBarIconMutex == NULL || GetLastError () == ERROR_ALREADY_EXISTS)
|
if (TaskBarIconMutex == NULL || GetLastError () == ERROR_ALREADY_EXISTS)
|
||||||
{
|
{
|
||||||
TaskBarIconMutex = NULL;
|
if (TaskBarIconMutex)
|
||||||
|
{
|
||||||
|
CloseHandle(TaskBarIconMutex);
|
||||||
|
TaskBarIconMutex = NULL;
|
||||||
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8692,7 +8696,12 @@ void AnalyzeKernelMiniDump (HWND hwndDlg)
|
|||||||
NormalCursor();
|
NormalCursor();
|
||||||
|
|
||||||
DWORD exitCode;
|
DWORD exitCode;
|
||||||
if (!GetExitCodeProcess (procInfo.hProcess, &exitCode) || exitCode != 0)
|
bool bExitCheck = (!GetExitCodeProcess (procInfo.hProcess, &exitCode) || exitCode != 0);
|
||||||
|
|
||||||
|
CloseHandle(procInfo.hProcess);
|
||||||
|
CloseHandle(procInfo.hThread);
|
||||||
|
|
||||||
|
if (bExitCheck)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8764,6 +8773,10 @@ void AnalyzeKernelMiniDump (HWND hwndDlg)
|
|||||||
{
|
{
|
||||||
handleWin32Error (hwndDlg);
|
handleWin32Error (hwndDlg);
|
||||||
Error ("DEBUGGER_NOT_FOUND");
|
Error ("DEBUGGER_NOT_FOUND");
|
||||||
|
CloseHandle (procInfo.hProcess);
|
||||||
|
CloseHandle (procInfo.hThread);
|
||||||
|
CloseHandle (hChildStdoutRead);
|
||||||
|
CloseHandle (hChildStdoutWrite);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8787,6 +8800,8 @@ void AnalyzeKernelMiniDump (HWND hwndDlg)
|
|||||||
output.insert (output.size(), pipeBuffer, bytesReceived);
|
output.insert (output.size(), pipeBuffer, bytesReceived);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CloseHandle (hChildStdoutRead);
|
||||||
|
|
||||||
NormalCursor();
|
NormalCursor();
|
||||||
|
|
||||||
bool otherDriver = (StringToUpperCase (output).find (StringToUpperCase (TC_APP_NAME)) == string::npos);
|
bool otherDriver = (StringToUpperCase (output).find (StringToUpperCase (TC_APP_NAME)) == string::npos);
|
||||||
@@ -8868,7 +8883,7 @@ void AnalyzeKernelMiniDump (HWND hwndDlg)
|
|||||||
|
|
||||||
retAddrs.push_back (s);
|
retAddrs.push_back (s);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
char url[MAX_URL_LENGTH];
|
char url[MAX_URL_LENGTH];
|
||||||
sprintf (url, TC_APPLINK_SECURE "&dest=syserr-report&os=%s&osver=%d.%d.%d&arch=%s&err=%I64x&arg1=%I64x&arg2=%I64x&arg3=%I64x&arg4=%I64x&flag=%s&drv=%s",
|
sprintf (url, TC_APPLINK_SECURE "&dest=syserr-report&os=%s&osver=%d.%d.%d&arch=%s&err=%I64x&arg1=%I64x&arg2=%I64x&arg3=%I64x&arg4=%I64x&flag=%s&drv=%s",
|
||||||
GetWindowsEdition().c_str(),
|
GetWindowsEdition().c_str(),
|
||||||
@@ -8943,7 +8958,7 @@ void AnalyzeKernelMiniDump (HWND hwndDlg)
|
|||||||
|
|
||||||
if (AskYesNoString (msg.c_str()) == IDYES)
|
if (AskYesNoString (msg.c_str()) == IDYES)
|
||||||
ShellExecute (NULL, "open", urlStr.c_str(), NULL, NULL, SW_SHOWNORMAL);
|
ShellExecute (NULL, "open", urlStr.c_str(), NULL, NULL, SW_SHOWNORMAL);
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -150,6 +150,8 @@ static int CompressBuffer (char *out, char *in, int len)
|
|||||||
if (!CreatePipe (&hChildStdinRead, &((HANDLE) hChildStdinWrite), &securityAttrib, 0))
|
if (!CreatePipe (&hChildStdinRead, &((HANDLE) hChildStdinWrite), &securityAttrib, 0))
|
||||||
{
|
{
|
||||||
PkgError ("Cannot create STDIN pipe.");
|
PkgError ("Cannot create STDIN pipe.");
|
||||||
|
CloseHandle(hChildStdoutWrite);
|
||||||
|
CloseHandle(hChildStdoutRead);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
SetHandleInformation (hChildStdinWrite, HANDLE_FLAG_INHERIT, 0);
|
SetHandleInformation (hChildStdinWrite, HANDLE_FLAG_INHERIT, 0);
|
||||||
@@ -166,6 +168,10 @@ static int CompressBuffer (char *out, char *in, int len)
|
|||||||
if (!CreateProcess (NULL, "gzip --best", NULL, NULL, TRUE, 0, NULL, NULL, &startupInfo, &procInfo))
|
if (!CreateProcess (NULL, "gzip --best", NULL, NULL, TRUE, 0, NULL, NULL, &startupInfo, &procInfo))
|
||||||
{
|
{
|
||||||
PkgError ("Error: Cannot run gzip.\n\nBefore you can create a self-extracting VeraCrypt package, you need to have the open-source 'gzip' compression tool placed in any directory in the search path for executable files (for example, in 'C:\\Windows\\').\n\nNote: gzip can be freely downloaded e.g. from www.gzip.org");
|
PkgError ("Error: Cannot run gzip.\n\nBefore you can create a self-extracting VeraCrypt package, you need to have the open-source 'gzip' compression tool placed in any directory in the search path for executable files (for example, in 'C:\\Windows\\').\n\nNote: gzip can be freely downloaded e.g. from www.gzip.org");
|
||||||
|
CloseHandle(hChildStdoutWrite);
|
||||||
|
CloseHandle(hChildStdoutRead);
|
||||||
|
CloseHandle(hChildStdinRead);
|
||||||
|
CloseHandle(hChildStdinWrite);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,6 +185,8 @@ static int CompressBuffer (char *out, char *in, int len)
|
|||||||
if (!CloseHandle (hChildStdoutWrite))
|
if (!CloseHandle (hChildStdoutWrite))
|
||||||
{
|
{
|
||||||
PkgError ("Cannot close STDOUT write");
|
PkgError ("Cannot close STDOUT write");
|
||||||
|
CloseHandle(hChildStdoutRead);
|
||||||
|
CloseHandle(hChildStdinRead);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -198,6 +206,9 @@ static int CompressBuffer (char *out, char *in, int len)
|
|||||||
else
|
else
|
||||||
bGzipHeaderRead = TRUE; // Skip the 10-byte gzip header
|
bGzipHeaderRead = TRUE; // Skip the 10-byte gzip header
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CloseHandle(hChildStdoutRead);
|
||||||
|
CloseHandle(hChildStdinRead);
|
||||||
return res_len - 8; // A gzip stream ends with a CRC-32 hash and a 32-bit size (those 8 bytes need to be chopped off)
|
return res_len - 8; // A gzip stream ends with a CRC-32 hash and a 32-bit size (those 8 bytes need to be chopped off)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user