Indrek Altpere : winemenubuilder: Fix crash on invalid icon entries.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Sep 5 11:10:37 CDT 2014


Module: wine
Branch: master
Commit: c205e6800a63a5df9960d8484a2e67687d53bc50
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=c205e6800a63a5df9960d8484a2e67687d53bc50

Author: Indrek Altpere <efbiaiinzinz at hotmail.com>
Date:   Thu Aug 28 19:05:19 2014 +0300

winemenubuilder: Fix crash on invalid icon entries.

---

 programs/winemenubuilder/winemenubuilder.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/programs/winemenubuilder/winemenubuilder.c b/programs/winemenubuilder/winemenubuilder.c
index b617510..fba3664 100644
--- a/programs/winemenubuilder/winemenubuilder.c
+++ b/programs/winemenubuilder/winemenubuilder.c
@@ -612,6 +612,7 @@ static int populate_module_icons(HMODULE hModule, GRPICONDIR *grpIconDir, ICONDI
             if ((hResData = LoadResource(hModule, hResInfo)))
             {
                 BITMAPINFO *pIcon;
+                DWORD size = min( grpIconDir->idEntries[i].dwBytesInRes, ((IMAGE_RESOURCE_DATA_ENTRY *)hResInfo)->Size );
                 if ((pIcon = LockResource(hResData)))
                 {
                     iconDirEntries[validEntries].bWidth = grpIconDir->idEntries[i].bWidth;
@@ -620,11 +621,11 @@ static int populate_module_icons(HMODULE hModule, GRPICONDIR *grpIconDir, ICONDI
                     iconDirEntries[validEntries].bReserved = grpIconDir->idEntries[i].bReserved;
                     iconDirEntries[validEntries].wPlanes = grpIconDir->idEntries[i].wPlanes;
                     iconDirEntries[validEntries].wBitCount = grpIconDir->idEntries[i].wBitCount;
-                    iconDirEntries[validEntries].dwBytesInRes = grpIconDir->idEntries[i].dwBytesInRes;
+                    iconDirEntries[validEntries].dwBytesInRes = size;
                     iconDirEntries[validEntries].dwImageOffset = *iconOffset;
                     validEntries++;
-                    memcpy(&icons[*iconOffset], pIcon, grpIconDir->idEntries[i].dwBytesInRes);
-                    *iconOffset += grpIconDir->idEntries[i].dwBytesInRes;
+                    memcpy(&icons[*iconOffset], pIcon, size);
+                    *iconOffset += size;
                 }
                 FreeResource(hResData);
             }




More information about the wine-cvs mailing list