Juan Lang : shell32: Dynamically allocate memory for executing an URL.
Alexandre Julliard
julliard at winehq.org
Mon Nov 19 08:19:37 CST 2007
Module: wine
Branch: master
Commit: 08ab605e374ac7dc7f6d97fe9544f11246c8b947
URL: http://source.winehq.org/git/wine.git/?a=commit;h=08ab605e374ac7dc7f6d97fe9544f11246c8b947
Author: Juan Lang <juan.lang at gmail.com>
Date: Fri Nov 16 12:43:35 2007 -0800
shell32: Dynamically allocate memory for executing an URL.
---
dlls/shell32/shlexec.c | 16 +++++++++++++---
1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/shell32/shlexec.c b/dlls/shell32/shlexec.c
index 1b891b3..c95d599 100644
--- a/dlls/shell32/shlexec.c
+++ b/dlls/shell32/shlexec.c
@@ -1407,9 +1407,11 @@ static UINT_PTR SHELL_execute_url( LPCWSTR lpFile, LPCWSTR wFile, LPCWSTR wcmd,
{
static const WCHAR wShell[] = {'\\','s','h','e','l','l','\\',0};
static const WCHAR wCommand[] = {'\\','c','o','m','m','a','n','d',0};
- WCHAR lpstrProtocol[256];
+ UINT_PTR retval;
+ WCHAR *lpstrProtocol;
LPCWSTR lpstrRes;
INT iSize;
+ DWORD len;
lpstrRes = strchrW(lpFile, ':');
if (lpstrRes)
@@ -1419,6 +1421,12 @@ static UINT_PTR SHELL_execute_url( LPCWSTR lpFile, LPCWSTR wFile, LPCWSTR wcmd,
TRACE("Got URL: %s\n", debugstr_w(lpFile));
/* Looking for ...protocol\shell\lpOperation\command */
+ len = iSize + lstrlenW(wShell) + lstrlenW(wCommand) + 1;
+ if (psei->lpVerb)
+ len += lstrlenW(psei->lpVerb);
+ else
+ len += lstrlenW(wszOpen);
+ lpstrProtocol = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
memcpy(lpstrProtocol, lpFile, iSize*sizeof(WCHAR));
lpstrProtocol[iSize] = '\0';
strcatW(lpstrProtocol, wShell);
@@ -1432,8 +1440,10 @@ static UINT_PTR SHELL_execute_url( LPCWSTR lpFile, LPCWSTR wFile, LPCWSTR wcmd,
lpFile += iSize;
while (*lpFile == ':') lpFile++;
}
- return execute_from_key(lpstrProtocol, lpFile, NULL, psei->lpParameters,
- wcmd, execfunc, psei, psei_out);
+ retval = execute_from_key(lpstrProtocol, lpFile, NULL, psei->lpParameters,
+ wcmd, execfunc, psei, psei_out);
+ HeapFree(GetProcessHeap(), 0, lpstrProtocol);
+ return retval;
}
/*************************************************************************
More information about the wine-cvs
mailing list