From 07791ffe43d1fda2618994f98986ab5e9cbf3c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 6 Feb 2016 18:31:25 +0100 Subject: kernel32: Strip invalid characters from mask in FindFirstFileExW. --- dlls/kernel32/file.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/dlls/kernel32/file.c b/dlls/kernel32/file.c index b6dba6a..3297f4b 100644 --- a/dlls/kernel32/file.c +++ b/dlls/kernel32/file.c @@ -2009,12 +2009,32 @@ HANDLE WINAPI FindFirstFileExW( LPCWSTR filename, FINDEX_INFO_LEVELS level, } else { + static const WCHAR invalidW[] = { '<', '>', '\"', 0 }; + static const WCHAR wildcardW[] = { '*', 0 }; + DWORD mask_len; + if (!RtlCreateUnicodeString( &info->mask, mask )) { SetLastError( ERROR_NOT_ENOUGH_MEMORY ); goto error; } + /* strip invalid characters from mask */ + mask_len = info->mask.Length / sizeof(WCHAR); + while (mask_len && strchrW(invalidW, mask[mask_len - 1])) + mask_len--; + + if (!mask_len) + { + strcpyW( info->mask.Buffer, wildcardW ); + info->mask.Length = strlenW(wildcardW) * sizeof(WCHAR); + } + else + { + info->mask.Buffer[mask_len] = 0; + info->mask.Length = mask_len * sizeof(WCHAR); + } + /* truncate dir name before mask */ *mask = 0; nt_name.Length = (mask - nt_name.Buffer) * sizeof(WCHAR); -- 2.7.0