Mercurial > vim
changeset 36307:597b858ce2b8 draft v9.1.0780
patch 9.1.0780: MS-Windows: incorrect Win32 error checking
Commit: https://github.com/vim/vim/commit/b516598092b37be5b486373b44fbc5a26ef54540
Author: Nir Lichtman <nir@lichtman.org>
Date: Sun Oct 13 19:44:07 2024 +0200
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>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 13 Oct 2024 20:00:02 +0200 |
parents | 0c269825d4b9 |
children | e6f38c6893bb |
files | src/os_win32.c src/version.c |
diffstat | 2 files changed, 22 insertions(+), 18 deletions(-) [+] |
line wrap: on
line diff
--- a/src/os_win32.c +++ b/src/os_win32.c @@ -918,9 +918,8 @@ null_libintl_wputenv(const wchar_t *envs * Enables or disables the specified privilege. */ static BOOL -win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable) -{ - BOOL bResult; +win32_enable_privilege(LPTSTR lpszPrivilege) +{ LUID luid; HANDLE hToken; TOKEN_PRIVILEGES tokenPrivileges; @@ -937,15 +936,22 @@ win32_enable_privilege(LPTSTR lpszPrivil tokenPrivileges.PrivilegeCount = 1; tokenPrivileges.Privileges[0].Luid = luid; - tokenPrivileges.Privileges[0].Attributes = bEnable ? - SE_PRIVILEGE_ENABLED : 0; - - bResult = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, - sizeof(TOKEN_PRIVILEGES), NULL, NULL); + tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, NULL, NULL)) + { + CloseHandle(hToken); + return FALSE; + } + + if (GetLastError() != ERROR_SUCCESS) + { + CloseHandle(hToken); + return FALSE; + } CloseHandle(hToken); - - return bResult && GetLastError() == ERROR_SUCCESS; + return TRUE; } #endif @@ -961,15 +967,11 @@ win32_enable_privilege(LPTSTR lpszPrivil 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)