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