[PATCH] Don't limit text size for message boxes from ShellMessageBoxWrapW

Nikolay Sivov nsivov at codeweavers.com
Sat May 29 15:24:32 CDT 2010


---
 dlls/shlwapi/ordinal.c |   17 ++++++++++++++---
 1 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/dlls/shlwapi/ordinal.c b/dlls/shlwapi/ordinal.c
index 22851d9..18295e4 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;
 }
-- 
1.5.6.5


--------------000309090801020401020901--



More information about the wine-patches mailing list