handle leak in internal_getgroups
Pierre A. Humblet
Pierre.Humblet@ieee.org
Tue Feb 4 16:40:00 GMT 2003
Corinna,
Sorry, I just noticed a handle leak in internal_getgroups
(change of 2003/1/17). It only happens when called from the
new function in the patch I just sent. It's a two line fix,
with a lot of whitespace changes.
Pierre
2003/02/04 Pierre Humblet <pierre.humblet@ieee.org>
* grp.cc (internal_getgroups): Do not return without closing
the process handle.
-------------- next part --------------
Index: grp.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/grp.cc,v
retrieving revision 1.75
diff -u -p -r1.75 grp.cc
--- grp.cc 4 Feb 2003 14:58:04 -0000 1.75
+++ grp.cc 4 Feb 2003 16:26:55 -0000
@@ -263,27 +263,28 @@ internal_getgroups (int gidsetsize, __gi
if (srchsid)
{
for (DWORD pg = 0; pg < groups->GroupCount; ++pg)
- if (*srchsid == groups->Groups[pg].Sid)
- return 1;
- return 0;
+ if ((cnt = (*srchsid == groups->Groups[pg].Sid)))
+ break;
+ cnt = -1;
}
- for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx)
- if (sid.getfromgr (gr))
- for (DWORD pg = 0; pg < groups->GroupCount; ++pg)
- if (sid == groups->Groups[pg].Sid &&
- sid != well_known_world_sid)
- {
- if (cnt < gidsetsize)
- grouplist[cnt] = gr->gr_gid;
- ++cnt;
- if (gidsetsize && cnt > gidsetsize)
- {
- if (hToken != cygheap->user.token)
- CloseHandle (hToken);
- goto error;
- }
- break;
- }
+ else
+ for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx)
+ if (sid.getfromgr (gr))
+ for (DWORD pg = 0; pg < groups->GroupCount; ++pg)
+ if (sid == groups->Groups[pg].Sid &&
+ sid != well_known_world_sid)
+ {
+ if (cnt < gidsetsize)
+ grouplist[cnt] = gr->gr_gid;
+ ++cnt;
+ if (gidsetsize && cnt > gidsetsize)
+ {
+ if (hToken != cygheap->user.token)
+ CloseHandle (hToken);
+ goto error;
+ }
+ break;
+ }
}
}
else
More information about the Cygwin-patches
mailing list