[PATCH 3/3] kernel32: GetLongPathName should fail when called with a wildcard.
Dmitry Timoshkov
dmitry at baikal.ru
Sat Oct 20 15:46:41 CDT 2018
Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
dlls/kernel32/path.c | 10 ++++++++--
dlls/kernel32/tests/path.c | 2 --
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c
index a9db7e8cdf..41f0d34aa4 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 f0cfb4d43c..df91b316ce 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");
--
2.17.1
More information about the wine-devel
mailing list