summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNir Lichtman <nir@lichtman.org>2024-10-13 19:44:07 +0200
committerChristian Brabandt <cb@256bit.org>2024-10-13 19:44:07 +0200
commitb516598092b37be5b486373b44fbc5a26ef54540 (patch)
treeeb079148a9dae204be489dd66ec1f109c6a74150
parenta2aa921f767da17d4b619f41b7a1210c762c91e2 (diff)
patch 9.1.0780: MS-Windows: incorrect Win32 error checkingv9.1.0780
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>
-rw-r--r--src/os_win32.c34
-rw-r--r--src/version.c2
2 files changed, 20 insertions, 16 deletions
diff --git a/src/os_win32.c b/src/os_win32.c
index 81a31409db..eedd0a5aba 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -918,9 +918,8 @@ null_libintl_wputenv(const wchar_t *envstring UNUSED)
* Enables or disables the specified privilege.
*/
static BOOL
-win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
+win32_enable_privilege(LPTSTR lpszPrivilege)
{
- BOOL bResult;
LUID luid;
HANDLE hToken;
TOKEN_PRIVILEGES tokenPrivileges;
@@ -937,15 +936,22 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
tokenPrivileges.PrivilegeCount = 1;
tokenPrivileges.Privileges[0].Luid = luid;
- tokenPrivileges.Privileges[0].Attributes = bEnable ?
- SE_PRIVILEGE_ENABLED : 0;
+ tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
- bResult = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges,
- sizeof(TOKEN_PRIVILEGES), NULL, NULL);
+ if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, NULL, NULL))
+ {
+ CloseHandle(hToken);
+ return FALSE;
+ }
- CloseHandle(hToken);
+ if (GetLastError() != ERROR_SUCCESS)
+ {
+ CloseHandle(hToken);
+ return FALSE;
+ }
- return bResult && GetLastError() == ERROR_SUCCESS;
+ CloseHandle(hToken);
+ return TRUE;
}
#endif
@@ -961,15 +967,11 @@ win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
void
PlatformId(void)
{
- static int done = FALSE;
-
- if (done)
- return;
-
OSVERSIONINFO ovi;
ovi.dwOSVersionInfoSize = sizeof(ovi);
- GetVersionEx(&ovi);
+ if (!GetVersionEx(&ovi))
+ return;
#ifdef FEAT_EVAL
vim_snprintf(windowsVersion, sizeof(windowsVersion), "%d.%d",
@@ -985,9 +987,9 @@ PlatformId(void)
#ifdef HAVE_ACL
// Enable privilege for getting or setting SACLs.
- win32_enable_privilege(SE_SECURITY_NAME, TRUE);
+ if (!win32_enable_privilege(SE_SECURITY_NAME))
+ return;
#endif
- done = TRUE;
}
#ifdef _MSC_VER
# pragma warning(pop)
diff --git a/src/version.c b/src/version.c
index becaa3e4bd..76d1889ee5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 780,
+/**/
779,
/**/
778,