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