diff --git a/programs/winebrowser/main.c b/programs/winebrowser/main.c index 20d6b72fa37..3ad24ae9402 100644 --- a/programs/winebrowser/main.c +++ b/programs/winebrowser/main.c @@ -190,15 +190,27 @@ static HDDEDATA CALLBACK ddeCb(UINT uType, UINT uFmt, HCONV hConv, return (HDDEDATA)FALSE; case XTYP_EXECUTE: + { + char *buffer = NULL; + if (!(size = DdeGetData(hData, NULL, 0, 0))) WINE_ERR("DdeGetData returned zero size of execute string\n"); - else if (!(ddeString = HeapAlloc(GetProcessHeap(), 0, size))) + else if (!(buffer = HeapAlloc(GetProcessHeap(), 0, size))) WINE_ERR("Out of memory\n"); - else if (DdeGetData(hData, (LPBYTE)ddeString, size, 0) != size) + else if (DdeGetData(hData, (LPBYTE)buffer, size, 0) != size) WINE_WARN("DdeGetData did not return %d bytes\n", size); + else + { + int len = MultiByteToWideChar(CP_ACP, 0, buffer, -1, NULL, 0); + if (!(ddeString = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)))) + WINE_ERR("Out of memory\n"); + else + MultiByteToWideChar(CP_ACP, 0, buffer, -1, ddeString, len); + } + HeapFree(GetProcessHeap(), 0, buffer); DdeFreeDataHandle(hData); return (HDDEDATA)DDE_FACK; - + } case XTYP_REQUEST: ret = -3; /* error */ if (!(size = DdeQueryStringW(ddeInst, hsz2, NULL, 0, CP_WINUNICODE)))