From ee18ead5457761c2a330d0005bb5bf1b8711ca80 Mon Sep 17 00:00:00 2001 From: Hans Leidekker Date: Wed, 6 Oct 2010 15:45:30 +0200 Subject: [PATCH] advapi32: Fix a buffer size query in LsaLookupSids. --- dlls/advapi32/lsa.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c index e12e31269ab..863ddb248e3 100644 --- a/dlls/advapi32/lsa.c +++ b/dlls/advapi32/lsa.c @@ -483,7 +483,9 @@ NTSTATUS WINAPI LsaLookupSids( (*Names)[i].Name.Length = 0; (*Names)[i].Name.MaximumLength = 0; (*Names)[i].Name.Buffer = NULL; - if (LookupAccountSidW(NULL, Sids[i], NULL, &name_size, NULL, &domain_size, &use)) + + if (!LookupAccountSidW(NULL, Sids[i], NULL, &name_size, NULL, &domain_size, &use) && + GetLastError() == ERROR_INSUFFICIENT_BUFFER) { LSA_UNICODE_STRING domain; @@ -502,11 +504,11 @@ NTSTATUS WINAPI LsaLookupSids( domain.Buffer = NULL; } - (*Names)[i].Use = use; (*Names)[i].Name.Length = (name_size - 1) * sizeof(WCHAR); (*Names)[i].Name.MaximumLength = name_size * sizeof(WCHAR); - (*Names)[i].Name.Buffer = HeapAlloc(GetProcessHeap(),0,name_size * sizeof(WCHAR)); + (*Names)[i].Name.Buffer = HeapAlloc(GetProcessHeap(), 0, name_size * sizeof(WCHAR)); LookupAccountSidW(NULL, Sids[i], (*Names)[i].Name.Buffer, &name_size, domain.Buffer, &domain_size, &use); + (*Names)[i].Use = use; if (domain_size) (*Names)[i].DomainIndex = build_domain(*ReferencedDomains, &domain);