From: Thomas Faber Date: Sun, 10 Jun 2018 13:45:57 +0000 (+0200) Subject: [ADVAPI32] Fix crash when running advapi32:security with DPH. X-Git-Tag: 0.4.11-dev~412 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=95c3e17a80a6645c51d3316953e42b21e098c574;ds=sidebyside [ADVAPI32] Fix crash when running advapi32:security with DPH. Import the following Wine commits: * 79636bebbfa Michael Müller: advapi32: Set last error to ERROR_SUCCESS in GetSidIdentifierAuthority. * 1d03ba76116 Hans Leidekker: advapi32: Fix parsing empty DACL/SACL security descriptor strings. * 5bc2e83c7ab Hans Leidekker: advapi32: Fix size returned from ConvertStringSecurityDescriptorToSecurityDescriptor on 64-bit. --- diff --git a/dll/win32/advapi32/wine/security.c b/dll/win32/advapi32/wine/security.c index 5885f5d7381..54dd595d49b 100644 --- a/dll/win32/advapi32/wine/security.c +++ b/dll/win32/advapi32/wine/security.c @@ -759,6 +759,7 @@ PSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(PSID pSid) { + SetLastError(ERROR_SUCCESS); return RtlIdentifierAuthoritySid(pSid); } @@ -2227,7 +2228,7 @@ static DWORD ParseAclStringFlags(LPCWSTR* StringAcl) DWORD flags = 0; LPCWSTR szAcl = *StringAcl; - while (*szAcl != '(') + while (*szAcl && *szAcl != '(') { if (*szAcl == 'P') { @@ -2538,7 +2539,7 @@ static BOOL ParseStringAclToAcl(LPCWSTR StringAcl, LPDWORD lpdwFlags, pAcl->AclRevision = ACL_REVISION; pAcl->Sbz1 = 0; pAcl->AclSize = length; - pAcl->AceCount = acecount++; + pAcl->AceCount = acecount; pAcl->Sbz2 = 0; } return TRUE; @@ -2549,7 +2550,6 @@ lerr: return FALSE; } - /****************************************************************************** * ParseStringSecurityDescriptorToSecurityDescriptor */ @@ -2565,7 +2565,7 @@ static BOOL ParseStringSecurityDescriptorToSecurityDescriptor( LPBYTE lpNext = NULL; DWORD len; - *cBytes = sizeof(SECURITY_DESCRIPTOR); + *cBytes = sizeof(SECURITY_DESCRIPTOR_RELATIVE); tok = heap_alloc( (lstrlenW(StringSecurityDescriptor) + 1) * sizeof(WCHAR));