[PATCH 5/8] scrrun: Check that source is directory in MoveFolder.

Robert Wilhelm wine at gitlab.winehq.org
Wed Jun 29 10:47:06 CDT 2022


From: Robert Wilhelm <robert.wilhelm at gmx.net>

Signed-off-by: Robert Wilhelm <robert.wilhelm at gmx.net>
---
 dlls/scrrun/filesystem.c       |  2 +-
 dlls/scrrun/tests/filesystem.c | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c
index 816d8993530..6ffebc0af12 100644
--- a/dlls/scrrun/filesystem.c
+++ b/dlls/scrrun/filesystem.c
@@ -3774,7 +3774,7 @@ static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR
         return E_INVALIDARG;
 
     attrs = GetFileAttributesW(source);
-    if(attrs == INVALID_FILE_ATTRIBUTES)
+    if((attrs == INVALID_FILE_ATTRIBUTES) || !(attrs & FILE_ATTRIBUTE_DIRECTORY))
         return CTL_E_PATHNOTFOUND;
 
     return MoveFileW(source, destination) ? S_OK : create_error(GetLastError());
diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c
index f2bfe52c2ad..4d144937840 100644
--- a/dlls/scrrun/tests/filesystem.c
+++ b/dlls/scrrun/tests/filesystem.c
@@ -2605,6 +2605,7 @@ static void test_MoveFolder(void)
     BSTR src, dst, str;
     WCHAR buffW1[MAX_PATH],buffW2[MAX_PATH];
     HRESULT hr;
+    File *file;
 
     get_temp_path(L"foo", buffW1);
     get_temp_path(L"bar", buffW2);
@@ -2642,6 +2643,19 @@ static void test_MoveFolder(void)
     ok(hr == CTL_E_PATHNOTFOUND, "Unexpected hr %#lx.\n", hr);
     SysFreeString(src);
     SysFreeString(dst);
+
+    file = CreateFileW(buffW1, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
+                       FILE_ATTRIBUTE_NORMAL, NULL);
+    ok(file != INVALID_HANDLE_VALUE, "CreateFile failed\n");
+    CloseHandle(file);
+
+    src = SysAllocString(buffW1);
+    dst = SysAllocString(buffW2);
+    hr = IFileSystem3_MoveFolder(fs3, src, dst); /* src is regular file */
+    ok(hr == CTL_E_PATHNOTFOUND, "Unexpected hr %#lx.\n", hr);
+    SysFreeString(src);
+    SysFreeString(dst);
+    DeleteFileW(buffW1);
 }
 
 static void test_DoOpenPipeStream(void)
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/343



More information about the wine-devel mailing list