Owen Rudge : advapi32: Return null-terminated buffer instead of null pointer for LsaLookupSids domains.
Alexandre Julliard
julliard at winehq.org
Fri Feb 3 13:31:32 CST 2017
Module: wine
Branch: master
Commit: 02ad092868adaba619b8ef1ac31f3e04d67d1b6d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=02ad092868adaba619b8ef1ac31f3e04d67d1b6d
Author: Owen Rudge <orudge at codeweavers.com>
Date: Thu Feb 2 10:30:44 2017 +0000
advapi32: Return null-terminated buffer instead of null pointer for LsaLookupSids domains.
Signed-off-by: Owen Rudge <orudge at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/advapi32/lsa.c | 28 ++++++++++++++++++++--------
1 file changed, 20 insertions(+), 8 deletions(-)
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
index 2a8b791..3da6d19 100644
--- a/dlls/advapi32/lsa.c
+++ b/dlls/advapi32/lsa.c
@@ -514,14 +514,15 @@ NTSTATUS WINAPI LsaLookupSids(
{
(*Names)[i].Name.Length = (name_size - 1) * sizeof(WCHAR);
(*Names)[i].Name.MaximumLength = name_size * sizeof(WCHAR);
- name_fullsize += (*Names)[i].Name.MaximumLength;
}
else
{
(*Names)[i].Name.Length = 0;
- (*Names)[i].Name.MaximumLength = 0;
+ (*Names)[i].Name.MaximumLength = sizeof(WCHAR);
}
+ name_fullsize += (*Names)[i].Name.MaximumLength;
+
/* This potentially allocates more than needed, cause different names will reuse same domain index.
Also it's not possible to store domain name length right here for the same reason. */
if (domain_size)
@@ -546,6 +547,13 @@ NTSTATUS WINAPI LsaLookupSids(
heap_free(name);
}
+ else
+ {
+ /* If we don't have a domain name, use a zero-length entry rather than a null value. */
+ domain_fullsize += sizeof(WCHAR);
+ domain.Length = 0;
+ domain.MaximumLength = sizeof(WCHAR);
+ }
}
}
@@ -572,18 +580,22 @@ NTSTATUS WINAPI LsaLookupSids(
{
domain.Length = (domain_size - 1) * sizeof(WCHAR);
domain.MaximumLength = domain_size * sizeof(WCHAR);
- domain.Buffer = heap_alloc(domain.MaximumLength);
}
+ else
+ {
+ /* Use a zero-length buffer */
+ domain.Length = 0;
+ domain.MaximumLength = sizeof(WCHAR);
+ }
+
+ domain.Buffer = heap_alloc(domain.MaximumLength);
(*Names)[i].Name.Buffer = name_buffer;
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 = lsa_reflist_add_domain(*ReferencedDomains, &domain, &domain_data);
- heap_free(domain.Buffer);
- }
+ (*Names)[i].DomainIndex = lsa_reflist_add_domain(*ReferencedDomains, &domain, &domain_data);
+ heap_free(domain.Buffer);
}
name_buffer += name_size;
More information about the wine-cvs
mailing list