winhelp
Eric Pouech
eric.pouech at wanadoo.fr
Sat Nov 9 12:27:50 CST 2002
this patch fixes a crash while loading some .hlp files (for the curious,
when the phrase index wasn't compressed for files of version >= 4.0)
A+
-------------- next part --------------
Name: wh_dec
ChangeLog: fixed loading HCW 4.0 files without phrase image compression
License: X11
GenDate: 2002/11/09 18:20:56 UTC
ModifiedFiles: programs/winhelp/hlpfile.c
AddedFiles:
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/programs/winhelp/hlpfile.c,v
retrieving revision 1.11
diff -u -u -r1.11 hlpfile.c
--- programs/winhelp/hlpfile.c 21 Oct 2002 18:20:05 -0000 1.11
+++ programs/winhelp/hlpfile.c 9 Nov 2002 17:34:50 -0000
@@ -1321,7 +1321,7 @@
*/
static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE* hlpfile)
{
- UINT num, dec_size;
+ UINT num, dec_size, cpr_size;
BYTE *buf_idx, *end_idx;
BYTE *buf_phs, *end_phs;
short i, n;
@@ -1347,11 +1347,14 @@
GET_USHORT(buf_idx, 9 + 26));
dec_size = GET_UINT(buf_idx, 9 + 12);
- if (dec_size != HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs))
+ cpr_size = GET_UINT(buf_idx, 9 + 16);
+
+ if (dec_size != cpr_size &&
+ dec_size != HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs))
{
WINE_WARN("size mismatch %u %u\n",
- dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs, end_phs));
- dec_size = max(dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs, end_phs));
+ dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs));
+ dec_size = max(dec_size, HLPFILE_UncompressedLZ77_Size(buf_phs + 9, end_phs));
}
phrases.offsets = HeapAlloc(GetProcessHeap(), 0, sizeof(unsigned) * (num + 1));
@@ -1373,7 +1376,10 @@
}
#undef getbit
- HLPFILE_UncompressLZ77(buf_phs + 9, end_phs, phrases.buffer);
+ if (dec_size == cpr_size)
+ memcpy(phrases.buffer, buf_phs + 9, dec_size);
+ else
+ HLPFILE_UncompressLZ77(buf_phs + 9, end_phs, phrases.buffer);
hlpfile->hasPhrases = FALSE;
return TRUE;
More information about the wine-patches
mailing list