Phil Lodwick : wininet: ftp:
Fix crash if input buffer is larger than MAX_PATH.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jun 8 05:06:04 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 3575918411599be393cf0872c192cd8e8ea5cc57
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=3575918411599be393cf0872c192cd8e8ea5cc57
Author: Phil Lodwick <Phil.Lodwick at EFI.COM>
Date: Wed Jun 7 14:35:16 2006 -0500
wininet: ftp: Fix crash if input buffer is larger than MAX_PATH.
---
dlls/wininet/ftp.c | 19 ++++++++++++++++---
1 files changed, 16 insertions(+), 3 deletions(-)
diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c
index 828f1e5..0970c95 100644
--- a/dlls/wininet/ftp.c
+++ b/dlls/wininet/ftp.c
@@ -746,16 +746,29 @@ lend:
BOOL WINAPI FtpGetCurrentDirectoryA(HINTERNET hFtpSession, LPSTR lpszCurrentDirectory,
LPDWORD lpdwCurrentDirectory)
{
- WCHAR dir[MAX_PATH];
+ WCHAR *dir = NULL;
DWORD len;
BOOL ret;
- if(lpdwCurrentDirectory) len = *lpdwCurrentDirectory;
+ if(lpdwCurrentDirectory) {
+ len = *lpdwCurrentDirectory;
+ if(lpszCurrentDirectory)
+ {
+ dir = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+ if (NULL == dir)
+ {
+ INTERNET_SetLastError(ERROR_OUTOFMEMORY);
+ return FALSE;
+ }
+ }
+ }
ret = FtpGetCurrentDirectoryW(hFtpSession, lpszCurrentDirectory?dir:NULL, lpdwCurrentDirectory?&len:NULL);
if(lpdwCurrentDirectory) {
*lpdwCurrentDirectory = len;
- if(lpszCurrentDirectory)
+ if(lpszCurrentDirectory) {
WideCharToMultiByte(CP_ACP, 0, dir, len, lpszCurrentDirectory, *lpdwCurrentDirectory, NULL, NULL);
+ HeapFree(GetProcessHeap(), 0, dir);
+ }
}
return ret;
}
More information about the wine-cvs
mailing list