Francois Gouget : userenv/tests: Windows 10 1809 changed GetUserProfileDirectory().

Alexandre Julliard julliard at winehq.org
Fri Nov 22 16:17:27 CST 2019


Module: wine
Branch: master
Commit: 8ec8a56a24dabc56d6a244268822e7bedc2fe785
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8ec8a56a24dabc56d6a244268822e7bedc2fe785

Author: Francois Gouget <fgouget at free.fr>
Date:   Thu Nov 21 16:25:20 2019 +0100

userenv/tests: Windows 10 1809 changed GetUserProfileDirectory().

It is no longer possible to get the required buffer size in the ANSI
version, and the Unicode one requires a NULL buffer.

Signed-off-by: Francois Gouget <fgouget at free.fr>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/userenv/tests/userenv.c | 42 ++++++++++++++++++++++++++++++------------
 1 file changed, 30 insertions(+), 12 deletions(-)

diff --git a/dlls/userenv/tests/userenv.c b/dlls/userenv/tests/userenv.c
index f6cfcc79ec..a91edeef26 100644
--- a/dlls/userenv/tests/userenv.c
+++ b/dlls/userenv/tests/userenv.c
@@ -303,7 +303,7 @@ static void test_get_profiles_dir(void)
 static void test_get_user_profile_dir(void)
 {
     BOOL ret;
-    DWORD error, len;
+    DWORD error, len, len2;
     HANDLE token;
     char *dirA;
     WCHAR *dirW;
@@ -351,18 +351,23 @@ static void test_get_user_profile_dir(void)
     ret = GetUserProfileDirectoryA( token, dirA, &len );
     error = GetLastError();
     ok(!ret, "expected failure\n");
-    ok(error == ERROR_INSUFFICIENT_BUFFER, "expected ERROR_INSUFFICIENT_BUFFER, got %u\n", error);
-    ok(len, "expected len > 0\n");
-    HeapFree( GetProcessHeap(), 0, dirA );
-
-    dirA = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len );
-    SetLastError( 0xdeadbeef );
-    ret = GetUserProfileDirectoryA( token, dirA, &len );
-    ok(ret, "expected success %u\n", GetLastError());
-    ok(len, "expected len > 0\n");
-    ok(lstrlenA( dirA ) == len - 1, "length mismatch %d != %d - 1\n", lstrlenA( dirA ), len );
-    trace("%s\n", dirA);
     HeapFree( GetProcessHeap(), 0, dirA );
+    if (error == ERROR_INSUFFICIENT_BUFFER)
+    {
+        ok(len, "expected len > 0\n");
+
+        dirA = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, len );
+        SetLastError( 0xdeadbeef );
+        ret = GetUserProfileDirectoryA( token, dirA, &len );
+        ok(ret, "expected success %u\n", GetLastError());
+        ok(len, "expected len > 0\n");
+        ok(lstrlenA( dirA ) == len - 1, "length mismatch %d != %d - 1\n", lstrlenA( dirA ), len );
+        trace("%s\n", dirA);
+        HeapFree( GetProcessHeap(), 0, dirA );
+    }
+    else
+        ok(broken(error == ERROR_INVALID_PARAMETER) /* win10 1809+ */,
+           "unexpected error %u\n", error);
 
     SetLastError( 0xdeadbeef );
     ret = GetUserProfileDirectoryW( NULL, NULL, NULL );
@@ -400,6 +405,19 @@ static void test_get_user_profile_dir(void)
     ok(lstrlenW( dirW ) == len - 1, "length mismatch %d != %d - 1\n", lstrlenW( dirW ), len );
     HeapFree( GetProcessHeap(), 0, dirW );
 
+    len2 = 0;
+    dirW = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, 32 * sizeof(WCHAR) );
+    SetLastError( 0xdeadbeef );
+    ret = GetUserProfileDirectoryW( token, dirW, &len2 );
+    error = GetLastError();
+    ok(!ret, "expected failure\n");
+    HeapFree( GetProcessHeap(), 0, dirW );
+    if (error == ERROR_INSUFFICIENT_BUFFER)
+        ok(len2 == len, "expected %d, got %d\n", len, len2);
+    else
+        ok(broken(error == ERROR_INVALID_PARAMETER) /* win10 1809+ */,
+           "unexpected error %u\n", error);
+
     CloseHandle( token );
 }
 




More information about the wine-cvs mailing list