diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index a9db7e8cdf5..41f0d34aa4e 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -297,6 +297,8 @@ DWORD WINAPI GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen HANDLE goit; BOOL is_legal_8dot3; + TRACE("%s,%p,%u\n", debugstr_w(shortpath), longpath, longlen); + if (!shortpath) { SetLastError(ERROR_INVALID_PARAMETER); @@ -308,8 +310,6 @@ DWORD WINAPI GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen return 0; } - TRACE("%s,%p,%d\n", debugstr_w(shortpath), longpath, longlen); - if (shortpath[0] == '\\' && shortpath[1] == '\\') { FIXME("UNC pathname %s\n", debugstr_w(shortpath)); @@ -333,6 +333,12 @@ DWORD WINAPI GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen lp = sp = 2; } + if (strpbrkW(shortpath + sp, wildcardsW)) + { + SetLastError(ERROR_INVALID_NAME); + return 0; + } + while (shortpath[sp]) { /* check for path delimiters and reproduce them */ diff --git a/dlls/kernel32/tests/path.c b/dlls/kernel32/tests/path.c index f0cfb4d43c2..df91b316ce6 100644 --- a/dlls/kernel32/tests/path.c +++ b/dlls/kernel32/tests/path.c @@ -1202,9 +1202,7 @@ static void test_GetLongPathNameA(void) strcpy(name, "*"); SetLastError(0xdeadbeef); length = pGetLongPathNameA(tempfile, temppath, MAX_PATH); -todo_wine ok(!length, "GetLongPathNameA should fail\n"); -todo_wine ok(GetLastError() == ERROR_INVALID_NAME, "wrong error %d\n", GetLastError()); strcpy(name, "longfilename.longext");