diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c index 22851d9201..18295e439b 100644 --- a/dlls/shlwapi/ordinal.c +++ b/dlls/shlwapi/ordinal.c @@ -4487,8 +4487,8 @@ DWORD WINAPI GetUIVersion(void) INT WINAPIV ShellMessageBoxWrapW(HINSTANCE hInstance, HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType, ...) { - WCHAR szText[100], szTitle[100]; - LPCWSTR pszText = szText, pszTitle = szTitle; + WCHAR *szText = NULL, szTitle[100]; + LPCWSTR pszText, pszTitle = szTitle; LPWSTR pszTemp; __ms_va_list args; int ret; @@ -4503,7 +4503,16 @@ INT WINAPIV ShellMessageBoxWrapW(HINSTANCE hInstance, HWND hWnd, LPCWSTR lpText, pszTitle = lpCaption; if (IS_INTRESOURCE(lpText)) - LoadStringW(hInstance, LOWORD(lpText), szText, sizeof(szText)/sizeof(szText[0])); + { + const WCHAR *ptr; + UINT len = LoadStringW(hInstance, LOWORD(lpText), (LPWSTR)&ptr, 0); + if (len) + { + szText = HeapAlloc(GetProcessHeap(), 0, (len + 1) * sizeof(WCHAR)); + if (szText) LoadStringW(hInstance, LOWORD(lpText), szText, len + 1); + } + pszText = szText; + } else pszText = lpText; @@ -4513,6 +4522,8 @@ INT WINAPIV ShellMessageBoxWrapW(HINSTANCE hInstance, HWND hWnd, LPCWSTR lpText, __ms_va_end(args); ret = MessageBoxW(hWnd, pszTemp, pszTitle, uType); + + HeapFree(GetProcessHeap(), 0, szText); LocalFree(pszTemp); return ret; }