MsgiAnsiToUnicodeReply: Use heap buffer for MDICREATSTRUCT instead of returning a pointer to a stackbuffer.

svn path=/trunk/; revision=58452
This commit is contained in:
Timo Kreuzer 2013-03-09 18:28:30 +00:00
parent 3f5bf2bb48
commit 4e493e9959

View file

@ -759,19 +759,22 @@ MsgiUnicodeToAnsiMessage(HWND hwnd, LPMSG AnsiMsg, LPMSG UnicodeMsg)
case WM_CREATE:
case WM_NCCREATE:
{
MDICREATESTRUCTA mdi_cs;
MDICREATESTRUCTA *pmdi_cs;
CREATESTRUCTA* CsA;
CREATESTRUCTW* CsW;
NTSTATUS Status;
CsW = (CREATESTRUCTW*)(UnicodeMsg->lParam);
CsA = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(CREATESTRUCTA));
CsA = RtlAllocateHeap(GetProcessHeap(), 0, sizeof(CREATESTRUCTA) + sizeof(MDICREATESTRUCTA));
if (NULL == CsA)
{
return FALSE;
}
memcpy(CsA, CsW, sizeof(CREATESTRUCTW));
/* pmdi_cs starts right after CsA */
pmdi_cs = (MDICREATESTRUCTA*)(CsA + 1);
RtlInitUnicodeString(&UnicodeString, CsW->lpszName);
Status = RtlUnicodeStringToAnsiString(&AnsiString, &UnicodeString, TRUE);
if (! NT_SUCCESS(Status))
@ -796,10 +799,10 @@ MsgiUnicodeToAnsiMessage(HWND hwnd, LPMSG AnsiMsg, LPMSG UnicodeMsg)
if (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD)
{
mdi_cs = *(MDICREATESTRUCTA *)CsW->lpCreateParams;
mdi_cs.szTitle = CsA->lpszName;
mdi_cs.szClass = CsA->lpszClass;
CsA->lpCreateParams = &mdi_cs;
*pmdi_cs = *(MDICREATESTRUCTA *)CsW->lpCreateParams;
pmdi_cs->szTitle = CsA->lpszName;
pmdi_cs->szClass = CsA->lpszClass;
CsA->lpCreateParams = pmdi_cs;
}
AnsiMsg->lParam = (LPARAM)CsA;