RESUBMIT: ExtractAssociatedIconA fix

Marcus Meissner marcus at jet.franken.de
Fri Jun 17 02:05:45 CDT 2005


Hi,

again ... but with more correct WideCharToMultiByte.

Ciao, Marcus

Changelog:
	ExtractAssociatedIconA needs to allocate enough space
	to have EAIW fill in lpIconPathW.

Index: dlls/shell32/iconcache.c
===================================================================
RCS file: /home/wine/wine/dlls/shell32/iconcache.c,v
retrieving revision 1.89
diff -u -r1.89 iconcache.c
--- dlls/shell32/iconcache.c	20 May 2005 18:58:35 -0000	1.89
+++ dlls/shell32/iconcache.c	17 Jun 2005 07:04:33 -0000
@@ -640,7 +640,12 @@
 {	
     HICON hIcon = NULL;
     INT len = MultiByteToWideChar(CP_ACP, 0, lpIconPath, -1, NULL, 0);
-    LPWSTR lpIconPathW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+    /* Note that we need to allocate MAX_PATH, since we are supposed to fill
+     * the correct executable if there is no icon in lpIconPath directly.
+     * lpIconPath itself is supposed to be large enough, so make sure lpIconPathW
+     * is large enough too. Yes, I am puking too.
+     */
+    LPWSTR lpIconPathW = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
 
     TRACE("%p %s %p\n", hInst, debugstr_a(lpIconPath), lpiIcon);
 
@@ -648,6 +653,7 @@
     {
         MultiByteToWideChar(CP_ACP, 0, lpIconPath, -1, lpIconPathW, len);
         hIcon = ExtractAssociatedIconW(hInst, lpIconPathW, lpiIcon);
+        WideCharToMultiByte(CP_ACP, 0, lpIconPathW, -1, lpIconPath, MAX_PATH , NULL, NULL);
         HeapFree(GetProcessHeap(), 0, lpIconPathW);
     }
     return hIcon;
-- 



More information about the wine-patches mailing list