Erich Hoover : advapi32: Fix NamedSecurityInfo test crash on some systems.

Alexandre Julliard julliard at winehq.org
Mon Dec 3 13:33:57 CST 2012


Module: wine
Branch: master
Commit: 22863acfcc8f52f2e96bc1088d303d5ac8137fc6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=22863acfcc8f52f2e96bc1088d303d5ac8137fc6

Author: Erich Hoover <ehoover at mines.edu>
Date:   Sun Dec  2 15:55:21 2012 -0700

advapi32: Fix NamedSecurityInfo test crash on some systems.

---

 dlls/advapi32/tests/security.c |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c
index 8c209bf..fbbbd17 100644
--- a/dlls/advapi32/tests/security.c
+++ b/dlls/advapi32/tests/security.c
@@ -3005,9 +3005,8 @@ static void test_SetEntriesInAclA(void)
 
 static void test_GetNamedSecurityInfoA(void)
 {
-    char b[sizeof(TOKEN_USER) + sizeof(SID) + sizeof(DWORD)*SID_MAX_SUB_AUTHORITIES];
-    char admin_ptr[sizeof(SID)+sizeof(ULONG)*SID_MAX_SUB_AUTHORITIES], dacl[100];
-    DWORD sid_size = sizeof(admin_ptr), l = sizeof(b);
+    char admin_ptr[sizeof(SID)+sizeof(ULONG)*SID_MAX_SUB_AUTHORITIES], dacl[100], *user;
+    DWORD sid_size = sizeof(admin_ptr), user_size;
     char invalid_path[] = "/an invalid file path";
     PSID admin_sid = (PSID) admin_ptr, user_sid;
     char sd[SECURITY_DESCRIPTOR_MIN_LENGTH];
@@ -3041,9 +3040,14 @@ static void test_GetNamedSecurityInfoA(void)
         win_skip("Failed to get current user token\n");
         return;
     }
-    GetTokenInformation(token, TokenUser, b, l, &l);
+    bret = GetTokenInformation(token, TokenUser, NULL, 0, &user_size);
+    ok(!bret && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+        "GetTokenInformation(TokenUser) failed with error %d\n", GetLastError());
+    user = HeapAlloc(GetProcessHeap(), 0, user_size);
+    bret = GetTokenInformation(token, TokenUser, user, user_size, &user_size);
+    ok(bret, "GetTokenInformation(TokenUser) failed with error %d\n", GetLastError());
     CloseHandle( token );
-    user_sid = ((TOKEN_USER *)b)->User.Sid;
+    user_sid = ((TOKEN_USER *)user)->User.Sid;
 
     bret = GetWindowsDirectoryA(windows_dir, MAX_PATH);
     ok(bret, "GetWindowsDirectory failed with error %d\n", GetLastError());
@@ -3055,6 +3059,7 @@ static void test_GetNamedSecurityInfoA(void)
     if (error != ERROR_SUCCESS && (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED))
     {
         win_skip("GetNamedSecurityInfoA is not implemented\n");
+        HeapFree(GetProcessHeap(), 0, user);
         return;
     }
     ok(!error, "GetNamedSecurityInfo failed with error %d\n", error);
@@ -3082,6 +3087,7 @@ static void test_GetNamedSecurityInfoA(void)
     if(isNT4)
     {
         win_skip("NT4 does not support GetNamedSecutityInfo with a NULL descriptor\n");
+        HeapFree(GetProcessHeap(), 0, user);
         return;
     }
 
@@ -3113,6 +3119,7 @@ static void test_GetNamedSecurityInfoA(void)
     bret = InitializeAcl(pDacl, sizeof(dacl), ACL_REVISION);
     ok(bret, "Failed to initialize ACL.\n");
     bret = pAddAccessAllowedAceEx(pDacl, ACL_REVISION, 0, GENERIC_ALL, user_sid);
+    HeapFree(GetProcessHeap(), 0, user);
     ok(bret, "Failed to add Current User to ACL.\n");
     bret = pAddAccessAllowedAceEx(pDacl, ACL_REVISION, 0, GENERIC_ALL, admin_sid);
     ok(bret, "Failed to add Administrator Group to ACL.\n");




More information about the wine-cvs mailing list