Fixed selecting multiple files in common file dialog 95-style

Josef Meixner Josef.Meixner at t-online.de
Sun Sep 15 13:31:27 CDT 2002


Problem:
	Selecting multiple files in an OpenDialog resulted in a crash, tested with 
PVAstrumento.

Changelog:
	dlls/commdlg/filedlg95.c:
		- 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.

Index: dlls/commdlg/filedlg95.c
===================================================================
RCS file: /home/wine/wine/dlls/commdlg/filedlg95.c,v
retrieving revision 1.80
diff -r1.80 filedlg95.c
1405c1405
<      ofn->lpstrFile = '\0';
---
>      ofn->lpstrFile[0] = '\0';
1410c1410
<      ofn->lpstrFile = '\0';
---
>      ofn->lpstrFile[0] = '\0';
1452a1453,1459
>   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");
>   }
1457c1464,1466
<     memcpy( ofn->lpstrFile + nSizePath, lpstrFileList, 
sizeUsed*sizeof(WCHAR) );
---
>     memset( ofn->lpstrFile + nSizePath, 0, sizeof(WCHAR) );
>     memcpy( ofn->lpstrFile + nSizePath + sizeof(WCHAR), lpstrFileList,
> 	    sizeUsed*sizeof(WCHAR) );
1463,1466c1472,1483
<     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 + 1)
>       {
> 	ofn->lpstrFile[nSizePath] = '\0';
> 	WideCharToMultiByte(CP_ACP, 0, lpstrFileList, sizeUsed,
> 			    ofn->lpstrFile + nSizePath + 1,
> 			    ofn->nMaxFile - nSizePath, NULL, NULL);
>       }
>     }




More information about the wine-patches mailing list