Module: wine Branch: master Commit: 92ee3543e549b02a916c2b6d4bcc9335d35b435e URL: https://source.winehq.org/git/wine.git/?a=commit;h=92ee3543e549b02a916c2b6d4...
Author: Erich E. Hoover erich.e.hoover@wine-staging.com Date: Thu Apr 25 11:36:15 2019 +0200
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 infyquest@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 c2c45ac..4b2876d 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; i<child->AceCount; 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; i<parent->AceCount; i++)