Skip to content

Commit dc690c9

Browse files
committed
Fixed memory leak from LocalGroupIsMember function
1 parent e32ab49 commit dc690c9

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

NetAdmin.xs

+16-8
Original file line numberDiff line numberDiff line change
@@ -1715,21 +1715,29 @@ XS(XS_NT__NetAdmin_LocalGroupIsMember)
17151715
AllocWideName((char*)SvPV(ST(1),n_a), lpwGroup);
17161716
do {
17171717
PLOCALGROUP_MEMBERS_INFO_0 pwzMembersInfo;
1718+
pwzMembersInfo = NULL;
17181719
lastError = NetLocalGroupGetMembers(lpwServer, lpwGroup, 0,
17191720
(LPBYTE*)&pwzMembersInfo,
17201721
PREFLEN, &entriesRead,
17211722
&totalEntries, &resumeHandle);
1722-
if (lastError != 0 && lastError != ERROR_MORE_DATA)
1723+
if (lastError != 0 && lastError != ERROR_MORE_DATA) {
1724+
if (pwzMembersInfo != NULL) {
1725+
NetApiBufferFree(pwzMembersInfo);
1726+
}
17231727
break;
1724-
for (index = 0; index < entriesRead; ++index)
1725-
if (EqualSid(pSid, pwzMembersInfo[index].lgrmi0_sid) != 0){
1726-
bReturn = TRUE;
1727-
break;
1728-
}
1728+
}
1729+
1730+
if (bReturn == FALSE) {
1731+
for (index = 0; index < entriesRead; ++index) {
1732+
if (EqualSid(pSid, pwzMembersInfo[index].lgrmi0_sid) != 0){
1733+
bReturn = TRUE;
1734+
break;
1735+
}
1736+
}
1737+
}
17291738

17301739
NetApiBufferFree(pwzMembersInfo);
1731-
} while(bReturn == FALSE &&
1732-
(lastError == ERROR_MORE_DATA || resumeHandle != 0));
1740+
} while(lastError == ERROR_MORE_DATA || resumeHandle != 0);
17331741

17341742
free(pSid);
17351743
FreeWideName(lpwServer);

0 commit comments

Comments
 (0)