1
0
forked from aniani/vim

patch 9.1.0780: MS-Windows: incorrect Win32 error checking

Problem:  MS-Windows: incorrect Win32 error checking
Solution: fix wrong order of error handling and perform
          some minor refactoring (Nir Lichtman)

In the function that adjusts the process privileges there is a mistake
in which GetLastError is called after CloseHandle, though clearly the
last error check is meant for the privileges related call before hand
and the current state appears like a mistake.

So fix this problem, and also perform the following:

- Remove the static variable done since the PlatformId is only called
  during initialization
- Fix incorrect parameter passed to the Win32 API privileges function

closes: #15845

Signed-off-by: Nir Lichtman <nir@lichtman.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Nir Lichtman
2024-10-13 19:44:07 +02:00
committed by Christian Brabandt
parent a2aa921f76
commit b516598092
2 changed files with 20 additions and 16 deletions

View File

@@ -918,9 +918,8 @@ null_libintl_wputenv(const wchar_t *envstring UNUSED)
* Enables or disables the specified privilege. * Enables or disables the specified privilege.
*/ */
static BOOL static BOOL
win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable) win32_enable_privilege(LPTSTR lpszPrivilege)
{ {
BOOL bResult;
LUID luid; LUID luid;
HANDLE hToken; HANDLE hToken;
TOKEN_PRIVILEGES tokenPrivileges; TOKEN_PRIVILEGES tokenPrivileges;
@@ -937,15 +936,22 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
tokenPrivileges.PrivilegeCount = 1; tokenPrivileges.PrivilegeCount = 1;
tokenPrivileges.Privileges[0].Luid = luid; tokenPrivileges.Privileges[0].Luid = luid;
tokenPrivileges.Privileges[0].Attributes = bEnable ? tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
SE_PRIVILEGE_ENABLED : 0;
bResult = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, NULL, NULL))
sizeof(TOKEN_PRIVILEGES), NULL, NULL); {
CloseHandle(hToken);
return FALSE;
}
if (GetLastError() != ERROR_SUCCESS)
{
CloseHandle(hToken);
return FALSE;
}
CloseHandle(hToken); CloseHandle(hToken);
return TRUE;
return bResult && GetLastError() == ERROR_SUCCESS;
} }
#endif #endif
@@ -961,15 +967,11 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
void void
PlatformId(void) PlatformId(void)
{ {
static int done = FALSE;
if (done)
return;
OSVERSIONINFO ovi; OSVERSIONINFO ovi;
ovi.dwOSVersionInfoSize = sizeof(ovi); ovi.dwOSVersionInfoSize = sizeof(ovi);
GetVersionEx(&ovi); if (!GetVersionEx(&ovi))
return;
#ifdef FEAT_EVAL #ifdef FEAT_EVAL
vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d", vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d",
@@ -985,9 +987,9 @@ PlatformId(void)
#ifdef HAVE_ACL #ifdef HAVE_ACL
// Enable privilege for getting or setting SACLs. // Enable privilege for getting or setting SACLs.
win32_enable_privilege(SE_SECURITY_NAME, TRUE); if (!win32_enable_privilege(SE_SECURITY_NAME))
return;
#endif #endif
done = TRUE;
} }
#ifdef _MSC_VER #ifdef _MSC_VER
# pragma warning(pop) # pragma warning(pop)

View File

@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
780,
/**/ /**/
779, 779,
/**/ /**/