From 92ee3543e549b02a916c2b6d4bcc9335d35b435e Mon Sep 17 00:00:00 2001 From: "Erich E. Hoover" Date: Thu, 25 Apr 2019 11:36:15 +0200 Subject: [PATCH] advapi32: Fix the initialization of combined DACLs when the new DACL is empty. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=38423 Signed-off-by: Vijay Kiran Kamuju Signed-off-by: Alexandre Julliard --- dlls/advapi32/security.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index c2c45aca4ae..4b2876d216c 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -5966,6 +5966,7 @@ BOOL WINAPI FileEncryptionStatusA(LPCSTR lpFileName, LPDWORD lpStatus) static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result) { + NTSTATUS status; ACL *combined; int i; @@ -5974,8 +5975,23 @@ static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result) if (!combined) return STATUS_NO_MEMORY; - memcpy(combined, child, child->AclSize); - combined->AclSize = child->AclSize+parent->AclSize; + status = RtlCreateAcl(combined, parent->AclSize+child->AclSize, ACL_REVISION); + if (status != STATUS_SUCCESS) + { + heap_free(combined); + return status; + } + + /* copy the new ACEs */ + for (i=0; iAceCount; i++) + { + ACE_HEADER *ace; + + if (!GetAce(child, i, (void*)&ace)) + continue; + if (!AddAce(combined, ACL_REVISION, MAXDWORD, ace, ace->AceSize)) + WARN("error adding new ACE\n"); + } /* copy the inherited ACEs */ for (i=0; iAceCount; i++)