Commit 9b2968dc authored by Vincent Povirk's avatar Vincent Povirk Committed by Alexandre Julliard

shell32: Dynamically allocate argify buffer if the static one is too small.

parent eeeca570
...@@ -781,7 +781,9 @@ static unsigned dde_connect(const WCHAR* key, const WCHAR* start, WCHAR* ddeexec ...@@ -781,7 +781,9 @@ static unsigned dde_connect(const WCHAR* key, const WCHAR* start, WCHAR* ddeexec
static const WCHAR wTopic[] = {'\\','t','o','p','i','c',0}; static const WCHAR wTopic[] = {'\\','t','o','p','i','c',0};
WCHAR regkey[256]; WCHAR regkey[256];
WCHAR * endkey = regkey + strlenW(key); WCHAR * endkey = regkey + strlenW(key);
WCHAR app[256], topic[256], ifexec[256], res[256]; WCHAR app[256], topic[256], ifexec[256], static_res[256];
WCHAR * dynamic_res=NULL;
WCHAR * res;
LONG applen, topiclen, ifexeclen; LONG applen, topiclen, ifexeclen;
WCHAR * exec; WCHAR * exec;
DWORD ddeInst = 0; DWORD ddeInst = 0;
...@@ -896,9 +898,14 @@ static unsigned dde_connect(const WCHAR* key, const WCHAR* start, WCHAR* ddeexec ...@@ -896,9 +898,14 @@ static unsigned dde_connect(const WCHAR* key, const WCHAR* start, WCHAR* ddeexec
} }
} }
SHELL_ArgifyW(res, sizeof(res)/sizeof(WCHAR), exec, lpFile, pidl, szCommandline, &resultLen); SHELL_ArgifyW(static_res, sizeof(static_res)/sizeof(WCHAR), exec, lpFile, pidl, szCommandline, &resultLen);
if (resultLen > sizeof(res)/sizeof(WCHAR)) if (resultLen > sizeof(static_res)/sizeof(WCHAR))
ERR("Argify buffer not large enough, truncated\n"); {
res = dynamic_res = HeapAlloc(GetProcessHeap(), 0, resultLen * sizeof(WCHAR));
SHELL_ArgifyW(dynamic_res, resultLen, exec, lpFile, pidl, szCommandline, NULL);
}
else
res = static_res;
TRACE("%s %s => %s\n", debugstr_w(exec), debugstr_w(lpFile), debugstr_w(res)); TRACE("%s %s => %s\n", debugstr_w(exec), debugstr_w(lpFile), debugstr_w(res));
/* It's documented in the KB 330337 that IE has a bug and returns /* It's documented in the KB 330337 that IE has a bug and returns
...@@ -922,6 +929,8 @@ static unsigned dde_connect(const WCHAR* key, const WCHAR* start, WCHAR* ddeexec ...@@ -922,6 +929,8 @@ static unsigned dde_connect(const WCHAR* key, const WCHAR* start, WCHAR* ddeexec
WARN("DdeClientTransaction failed with error %04x\n", DdeGetLastError(ddeInst)); WARN("DdeClientTransaction failed with error %04x\n", DdeGetLastError(ddeInst));
ret = 33; ret = 33;
HeapFree(GetProcessHeap(), 0, dynamic_res);
DdeDisconnect(hConv); DdeDisconnect(hConv);
error: error:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment