shell32: Skip dot directories in SHFileOperation.
In ShFileOperation when generating a file list with * wildcards, for
example for deletion, do not include the dot directories (. and ..) in
the list, because that cause the operation to spiral out of control.
diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
index e12df61..18d1133 100644
--- a/dlls/shell32/shlfileop.c
+++ b/dlls/shell32/shlfileop.c
@@ -779,7 +779,7 @@
while (res)
{
- dwCount++;
+ if (!IsDotDir(wfd.cFileName)) dwCount++;
res = FindNextFileW(hFile, &wfd);
}
@@ -879,18 +879,16 @@
WIN32_FIND_DATAW wfd;
HANDLE hFile = FindFirstFileW(szFile, &wfd);
LPWSTR szFullPath;
- BOOL res = TRUE, bDir;
-
- while (res)
- {
- szFullPath = wildcard_to_file(szFile, wfd.cFileName);
- bDir = add_file_to_entry(&flList->feFiles[(*pdwListIndex)++],
- szFullPath, TRUE);
- HeapFree(GetProcessHeap(), 0, szFullPath);
- res = FindNextFileW(hFile, &wfd);
+ BOOL res;
- if (bDir)
+ for (res = TRUE; res; res = FindNextFileW(hFile, &wfd))
+ {
+ if (IsDotDir(wfd.cFileName)) continue;
+ szFullPath = wildcard_to_file(szFile, wfd.cFileName);
+ if (add_file_to_entry(&flList->feFiles[(*pdwListIndex)++],
+ szFullPath, TRUE))
flList->bAnyDirectories = TRUE;
+ HeapFree(GetProcessHeap(), 0, szFullPath);
}
FindClose(hFile);