From dc690c9edcd05e8ff23b7c84dd4b25a26973d9b4 Mon Sep 17 00:00:00 2001 From: MS Date: Thu, 29 Aug 2019 10:50:20 +0300 Subject: [PATCH] Fixed memory leak from LocalGroupIsMember function --- NetAdmin.xs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/NetAdmin.xs b/NetAdmin.xs index eb477e1..bc8a49c 100644 --- a/NetAdmin.xs +++ b/NetAdmin.xs @@ -1715,21 +1715,29 @@ XS(XS_NT__NetAdmin_LocalGroupIsMember) AllocWideName((char*)SvPV(ST(1),n_a), lpwGroup); do { PLOCALGROUP_MEMBERS_INFO_0 pwzMembersInfo; + pwzMembersInfo = NULL; lastError = NetLocalGroupGetMembers(lpwServer, lpwGroup, 0, (LPBYTE*)&pwzMembersInfo, PREFLEN, &entriesRead, &totalEntries, &resumeHandle); - if (lastError != 0 && lastError != ERROR_MORE_DATA) + if (lastError != 0 && lastError != ERROR_MORE_DATA) { + if (pwzMembersInfo != NULL) { + NetApiBufferFree(pwzMembersInfo); + } break; - for (index = 0; index < entriesRead; ++index) - if (EqualSid(pSid, pwzMembersInfo[index].lgrmi0_sid) != 0){ - bReturn = TRUE; - break; - } + } + + if (bReturn == FALSE) { + for (index = 0; index < entriesRead; ++index) { + if (EqualSid(pSid, pwzMembersInfo[index].lgrmi0_sid) != 0){ + bReturn = TRUE; + break; + } + } + } NetApiBufferFree(pwzMembersInfo); - } while(bReturn == FALSE && - (lastError == ERROR_MORE_DATA || resumeHandle != 0)); + } while(lastError == ERROR_MORE_DATA || resumeHandle != 0); free(pSid); FreeWideName(lpwServer);