userenv: GetProfilesDirectoryW accepts a NULL buffer.
authorHans Leidekker <hans@codeweavers.com>
Wed, 2 Mar 2011 09:46:44 +0000 (10:46 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Wed, 2 Mar 2011 11:50:59 +0000 (12:50 +0100)
dlls/userenv/tests/userenv.c
dlls/userenv/userenv_main.c

index 446870f065c6ef59d464e36843ee9a750e4317eb..c96b710a2c755630006ad3c609445eac2491ef4d 100644 (file)
@@ -264,6 +264,23 @@ static void test_get_profiles_dir(void)
 
     HeapFree(GetProcessHeap(), 0, buf);
     HeapFree(GetProcessHeap(), 0, profiles_dir);
+
+    SetLastError(0xdeadbeef);
+    r = GetProfilesDirectoryW(NULL, NULL);
+    expect(FALSE, r);
+    expect_gle(ERROR_INVALID_PARAMETER);
+
+    cch = 0;
+    SetLastError(0xdeadbeef);
+    r = GetProfilesDirectoryW(NULL, &cch);
+    expect(FALSE, r);
+    expect_gle(ERROR_INSUFFICIENT_BUFFER);
+    ok(cch, "expected cch > 0\n");
+
+    SetLastError(0xdeadbeef);
+    r = GetProfilesDirectoryW(NULL, &cch);
+    expect(FALSE, r);
+    expect_gle(ERROR_INSUFFICIENT_BUFFER);
 }
 
 START_TEST(userenv)
index 59b3b1f95468fe1612ff346a29647fcf9853f002..42044722f5b99015cb1ade709930ba5588b24344 100644 (file)
@@ -201,7 +201,7 @@ BOOL WINAPI GetProfilesDirectoryW( LPWSTR lpProfilesDir, LPDWORD lpcchSize )
 
     TRACE("%p %p\n", lpProfilesDir, lpcchSize );
 
-    if (!lpProfilesDir || !lpcchSize)
+    if (!lpcchSize)
     {
         SetLastError(ERROR_INVALID_PARAMETER);
         return FALSE;
@@ -234,7 +234,7 @@ BOOL WINAPI GetProfilesDirectoryW( LPWSTR lpProfilesDir, LPDWORD lpcchSize )
     }
     expanded_len = ExpandEnvironmentStringsW(unexpanded_profiles_dir, NULL, 0);
     /* The returned length doesn't include the NULL terminator. */
-    if (*lpcchSize < expanded_len - 1)
+    if (*lpcchSize < expanded_len - 1 || !lpProfilesDir)
     {
         *lpcchSize = expanded_len - 1;
         SetLastError(ERROR_INSUFFICIENT_BUFFER);