You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by iv...@apache.org on 2019/05/26 11:01:02 UTC
svn commit: r1860057 - in /apr/apr/trunk: CHANGES user/win32/userinfo.c
Author: ivan
Date: Sun May 26 11:01:02 2019
New Revision: 1860057
URL: http://svn.apache.org/viewvc?rev=1860057&view=rev
Log:
Fix handle leak in the Win32 apr_uid_current implementation.
Modified:
apr/apr/trunk/CHANGES
apr/apr/trunk/user/win32/userinfo.c
Modified: apr/apr/trunk/CHANGES
URL: http://svn.apache.org/viewvc/apr/apr/trunk/CHANGES?rev=1860057&r1=1860056&r2=1860057&view=diff
==============================================================================
--- apr/apr/trunk/CHANGES [utf-8] (original)
+++ apr/apr/trunk/CHANGES [utf-8] Sun May 26 11:01:02 2019
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes for APR 2.0.0
+ *) Fix handle leak in the Win32 apr_uid_current implementation.
+ PR 61165. [Ivan Zhakov]
+
*) apr_rwlock_t: Use native Slim Reader/Writer (SRW) locks on Windows.
PR 51360. [Ivan Zhakov]
Modified: apr/apr/trunk/user/win32/userinfo.c
URL: http://svn.apache.org/viewvc/apr/apr/trunk/user/win32/userinfo.c?rev=1860057&r1=1860056&r2=1860057&view=diff
==============================================================================
--- apr/apr/trunk/user/win32/userinfo.c (original)
+++ apr/apr/trunk/user/win32/userinfo.c Sun May 26 11:01:02 2019
@@ -171,27 +171,38 @@ APR_DECLARE(apr_status_t) apr_uid_curren
DWORD needed;
TOKEN_USER *usr;
TOKEN_PRIMARY_GROUP *grp;
-
+ apr_status_t rv;
+
if(!OpenProcessToken(GetCurrentProcess(), STANDARD_RIGHTS_READ | READ_CONTROL | TOKEN_QUERY, &threadtok)) {
return apr_get_os_error();
}
*uid = NULL;
if (!GetTokenInformation(threadtok, TokenUser, NULL, 0, &needed)
- && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
&& (usr = apr_palloc(p, needed))
- && GetTokenInformation(threadtok, TokenUser, usr, needed, &needed))
+ && GetTokenInformation(threadtok, TokenUser, usr, needed, &needed)) {
*uid = usr->User.Sid;
- else
- return apr_get_os_error();
+ }
+ else {
+ rv = apr_get_os_error();
+ CloseHandle(threadtok);
+ return rv;
+ }
if (!GetTokenInformation(threadtok, TokenPrimaryGroup, NULL, 0, &needed)
&& (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
&& (grp = apr_palloc(p, needed))
- && GetTokenInformation(threadtok, TokenPrimaryGroup, grp, needed, &needed))
+ && GetTokenInformation(threadtok, TokenPrimaryGroup, grp, needed, &needed)) {
*gid = grp->PrimaryGroup;
- else
- return apr_get_os_error();
+ }
+ else {
+ rv = apr_get_os_error();
+ CloseHandle(threadtok);
+ return rv;
+ }
+
+ CloseHandle(threadtok);
return APR_SUCCESS;
#endif