From: Robert Wilhelm robert.wilhelm@gmx.net
--- dlls/scrrun/filesystem.c | 7 +++++-- dlls/scrrun/tests/filesystem.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/dlls/scrrun/filesystem.c b/dlls/scrrun/filesystem.c index 236f304c854..eb982457f50 100644 --- a/dlls/scrrun/filesystem.c +++ b/dlls/scrrun/filesystem.c @@ -3793,6 +3793,10 @@ static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR if(!source || !source[0] || !destination || !destination[0]) return E_INVALIDARG;
+ len = SysStringLen(source); + if (source[len-1] == '\' || source[len-1] == '/') + return CTL_E_PATHNOTFOUND; + if (!GetFullPathNameW(source, MAX_PATH, src_path, &filename)) return E_FAIL; src_len = (filename - src_path) / sizeof(WCHAR); @@ -3800,9 +3804,8 @@ static HRESULT WINAPI filesys_MoveFolder(IFileSystem3 *iface, BSTR source, BSTR if (wcspbrk(filename,L"*?")) wildcard = TRUE;
- len = SysStringLen(source); lstrcpyW(src_path, source); - if (source[len-1] != '\' && source[len-1] != '/') wcscat(src_path, L"\"); + wcscat(src_path, L"\");
dst_len = lstrlenW(destination);
diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 34869ee531f..5217be00007 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -2681,6 +2681,23 @@ static void test_MoveFolder(void) ok(RemoveDirectoryW(pathW), "can't remove %s directory\n", wine_dbgstr_w(pathW)); ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2));
+ GetTempPathW(MAX_PATH, buffW1); + lstrcatW(buffW1,L"foo"); + GetTempPathW(MAX_PATH, buffW2); + lstrcatW(buffW2,L"bar"); + ok(CreateDirectoryW(buffW1, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW1)); + ok(CreateDirectoryW(buffW2, NULL), "CreateDirectory(%s) failed\n", wine_dbgstr_w(buffW2)); + lstrcpyW(pathW,buffW1); + lstrcatW(pathW,L"\"); + src = SysAllocString(pathW); + dst = SysAllocString(buffW2); + hr = IFileSystem3_MoveFolder(fs3, src, dst); + ok(hr == CTL_E_PATHNOTFOUND, "Unexpected hr %#lx.\n", hr); + SysFreeString(src); + SysFreeString(dst); + ok(RemoveDirectoryW(buffW1), "can't remove %s directory\n", wine_dbgstr_w(buffW1)); + ok(RemoveDirectoryW(buffW2), "can't remove %s directory\n", wine_dbgstr_w(buffW2)); + GetTempPathW(MAX_PATH, buffW1); lstrcatW(buffW1,L"foo"); GetTempPathW(MAX_PATH, buffW2);