From cc3a74d949d14d0bc1b55a5603a551748ad89682 Mon Sep 17 00:00:00 2001
From: Alexandre Julliard <julliard@winehq.org>
Date: Tue, 17 Sep 2002 18:33:55 +0000
Subject: [PATCH] Authors: Josef Meixner <Josef.Meixner@t-online.de>, Huw
 Davies <huw@codeweavers.com> - Initializing the return-string shouldn't
 change the pointer. - Added "FIXME" for case not handled. - Directory and the
 filenames have to be separated by "\0". - Added check to handle possible
 signed/unsigned overflow.

---
 dlls/commdlg/filedlg95.c | 28 +++++++++++++++++++++-------
 1 file changed, 21 insertions(+), 7 deletions(-)

diff --git a/dlls/commdlg/filedlg95.c b/dlls/commdlg/filedlg95.c
index e0213eea152..1c601915fc5 100644
--- a/dlls/commdlg/filedlg95.c
+++ b/dlls/commdlg/filedlg95.c
@@ -1402,12 +1402,12 @@ BOOL FILEDLG95_OnOpenMultipleFiles(HWND hwnd, LPWSTR lpstrFileList, UINT nFileCo
   if(fodInfos->unicode)
   {
      LPOPENFILENAMEW ofn = (LPOPENFILENAMEW) fodInfos->ofnInfos;
-     ofn->lpstrFile = '\0';
+     ofn->lpstrFile[0] = '\0';
   }
   else
   {
      LPOPENFILENAMEA ofn = fodInfos->ofnInfos;
-     ofn->lpstrFile = '\0';
+     ofn->lpstrFile[0] = '\0';
   }
 
   SHGetPathFromIDListW( fodInfos->ShellInfos.pidlAbsCurrent, lpstrPathSpec );
@@ -1450,6 +1450,13 @@ BOOL FILEDLG95_OnOpenMultipleFiles(HWND hwnd, LPWSTR lpstrFileList, UINT nFileCo
   }
 
   nSizePath = strlenW(lpstrPathSpec) + 1;
+  if ( !(fodInfos->ofnInfos->Flags & OFN_EXPLORER) )
+  {
+    /* For "oldstyle" dialog the components have to
+       be spearated by blanks (not '\0'!) and short
+       filenames have to be used! */
+    FIXME("Components have to be separated by blanks");
+  }
   if(fodInfos->unicode)
   {
     LPOPENFILENAMEW ofn = (LPOPENFILENAMEW) fodInfos->ofnInfos;
@@ -1460,13 +1467,20 @@ BOOL FILEDLG95_OnOpenMultipleFiles(HWND hwnd, LPWSTR lpstrFileList, UINT nFileCo
   {
     LPOPENFILENAMEA ofn = fodInfos->ofnInfos;
 
-    WideCharToMultiByte(CP_ACP, 0, lpstrPathSpec, -1,
-          ofn->lpstrFile, ofn->nMaxFile, NULL, NULL);
-    WideCharToMultiByte(CP_ACP, 0, lpstrFileList, sizeUsed,
-          &ofn->lpstrFile[nSizePath], ofn->nMaxFile - nSizePath, NULL, NULL);
+    if (ofn->lpstrFile != NULL)
+    {
+      WideCharToMultiByte(CP_ACP, 0, lpstrPathSpec, -1,
+			  ofn->lpstrFile, ofn->nMaxFile, NULL, NULL);
+      if (ofn->nMaxFile > nSizePath)
+      {
+	WideCharToMultiByte(CP_ACP, 0, lpstrFileList, sizeUsed,
+			    ofn->lpstrFile + nSizePath,
+			    ofn->nMaxFile - nSizePath, NULL, NULL);
+      }
+    }
   }
 
-  fodInfos->ofnInfos->nFileOffset = nSizePath;
+  fodInfos->ofnInfos->nFileOffset = nSizePath + 1;
   fodInfos->ofnInfos->nFileExtension = 0;
 
   /* clean and exit */
-- 
GitLab