https://git.reactos.org/?p=reactos.git;a=commitdiff;h=3299e96e91da7c4abe17182bc56e6953d95184b7

commit 3299e96e91da7c4abe17182bc56e6953d95184b7
Author:     Katayama Hirofumi MZ <katayama.hirofumi...@gmail.com>
AuthorDate: Tue Jan 9 19:38:34 2024 +0900
Commit:     GitHub <nore...@github.com>
CommitDate: Tue Jan 9 19:38:34 2024 +0900

    [SHELL32] SHFileOperation: Fail elegantly if source doesn't exist (#6318)
    
    Based on KRosUser's dragdropfixpart2.patch.
    JIRA issue: CORE-19417, CORE-19211
    - Check source file existence.
---
 dll/win32/shell32/shlfileop.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/dll/win32/shell32/shlfileop.cpp b/dll/win32/shell32/shlfileop.cpp
index cc3bc40748c..3480cfd2af0 100644
--- a/dll/win32/shell32/shlfileop.cpp
+++ b/dll/win32/shell32/shlfileop.cpp
@@ -1735,11 +1735,13 @@ static BOOL move_file_to_file(FILE_OPERATION *op, const 
WCHAR *szFrom, const WCH
 /* moves a file or directory to another directory */
 static void move_to_dir(FILE_OPERATION *op, const FILE_ENTRY *feFrom, const 
FILE_ENTRY *feTo)
 {
-    WCHAR szDestPath[MAX_PATH];
+    if (feFrom->attributes == INVALID_FILE_ATTRIBUTES)
+        return;
 
     if (!PathFileExistsW(feTo->szFullPath))
         SHNotifyCreateDirectoryW(feTo->szFullPath, NULL);
 
+    WCHAR szDestPath[MAX_PATH];
     PathCombineW(szDestPath, feTo->szFullPath, feFrom->szFilename);
 
     if (IsAttribFile(feFrom->attributes))
@@ -1763,6 +1765,9 @@ static DWORD move_files(FILE_OPERATION *op, BOOL 
multiDest, const FILE_LIST *flF
     if (!flTo->dwNumFiles)
         return ERROR_FILE_NOT_FOUND;
 
+    if (flFrom->bAnyDontExist)
+        return ERROR_SHELL_INTERNAL_FILE_NOT_FOUND;
+
     if (!(multiDest) &&
         flTo->dwNumFiles > 1 && flFrom->dwNumFiles > 1)
     {

Reply via email to