From c680fbbc04daa82ae1a5e348c0f303f0ee14d989 Mon Sep 17 00:00:00 2001 From: kichik Date: Sat, 25 Mar 2006 16:29:41 +0000 Subject: [PATCH] write little-endian values in replace_icon git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@4612 212acab6-be3b-0410-9dea-997c60f758d6 --- Source/util.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Source/util.cpp b/Source/util.cpp index a326d19a..b6e64a8e 100644 --- a/Source/util.cpp +++ b/Source/util.cpp @@ -160,7 +160,7 @@ static FILE * open_icon(const char* filename, IconGroupHeader *igh) // replace_icon, must get an initialized resource editor void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename) { - IconGroupHeader igh; + IconGroupHeader igh, *new_igh; FILE *f = open_icon(filename, &igh); BYTE* rsrcIconGroup = (BYTE*)malloc(sizeof(IconGroupHeader) + igh.wCount*SIZEOF_RSRC_ICON_GROUP_ENTRY); @@ -168,6 +168,11 @@ void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename) CopyMemory(rsrcIconGroup, &igh, sizeof(IconGroupHeader)); + new_igh = (IconGroupHeader *) rsrcIconGroup; + FIX_ENDIAN_INT16_INPLACE(new_igh->wIsIcon); + FIX_ENDIAN_INT16_INPLACE(new_igh->wReserved); + FIX_ENDIAN_INT16_INPLACE(new_igh->wCount); + RsrcIconGroupEntry* ige = (RsrcIconGroupEntry*)(rsrcIconGroup + sizeof(IconGroupHeader)); int i = 1; @@ -178,10 +183,9 @@ void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename) for (i = 0; i < igh.wCount; i++) { fread(ige, sizeof(FileIconGroupEntry)-sizeof(DWORD), 1, f); - FIX_ENDIAN_INT16_INPLACE(ige->wRsrcId); - FIX_ENDIAN_INT32_INPLACE(ige->dwRawSize); + DWORD dwRawSize = FIX_ENDIAN_INT32(ige->dwRawSize); - ige->wRsrcId = i+1; + ige->wRsrcId = FIX_ENDIAN_INT16(i + 1); DWORD dwOffset; fread(&dwOffset, sizeof(DWORD), 1, f); @@ -195,13 +199,13 @@ void replace_icon(CResourceEditor* re, WORD wIconId, const char* filename) free(rsrcIconGroup); throw runtime_error("corrupted icon file, too small"); } - BYTE* iconData = (BYTE*)malloc(ige->dwRawSize); + BYTE* iconData = (BYTE*)malloc(dwRawSize); if (!iconData) { free(rsrcIconGroup); throw bad_alloc(); } - fread(iconData, sizeof(BYTE), ige->dwRawSize, f); - re->UpdateResource(RT_ICON, MAKEINTRESOURCE(i+1), NSIS_DEFAULT_LANG, iconData, ige->dwRawSize); + fread(iconData, sizeof(BYTE), dwRawSize, f); + re->UpdateResource(RT_ICON, MAKEINTRESOURCE(i+1), NSIS_DEFAULT_LANG, iconData, dwRawSize); free(iconData); fsetpos(f, &pos);