wine-staging/patches/kernel32-FindFirstFile/0001-kernel32-Strip-invalid-characters-from-mask-in-FindF.patch

50 lines
1.5 KiB
Diff

From 07791ffe43d1fda2618994f98986ab5e9cbf3c97 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
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