Skip to content

Commit 56a667e

Browse files
committed
mmcmp.c: added a sanity check to 16bit compressed blocks' decompression
1 parent bc04a27 commit 56a667e

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/mmcmp.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
156156
{
157157
DWORD dwMemLength;
158158
LPCBYTE lpMemFile;
159-
LPBYTE pBuffer;
159+
LPBYTE pBuffer, pEnd;
160160
LPMMCMPFILEHEADER pmfh;
161161
LPMMCMPHEADER pmmh;
162162
const DWORD *pblk_table;
@@ -186,6 +186,7 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
186186
dwFileSize = pmmh->filesize;
187187
if ((pBuffer = (LPBYTE)GlobalAllocPtr(GHND, (dwFileSize + 31) & ~15)) == NULL)
188188
return FALSE;
189+
pEnd = pBuffer + dwFileSize;
189190
pblk_table = (const DWORD *)(lpMemFile+pmmh->blktable);
190191
for (UINT nBlock=0; nBlock<pmmh->nblocks; nBlock++)
191192
{
@@ -302,8 +303,10 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
302303
{
303304
newval ^= 0x8000;
304305
}
305-
pDest[dwPos++] = (BYTE) (((WORD)newval) & 0xff);
306-
pDest[dwPos++] = (BYTE) (((WORD)newval) >> 8);
306+
if (pEnd - pDest < 2) goto err;
307+
dwPos += 2;
308+
*pDest++ = (BYTE) (((WORD)newval) & 0xff);
309+
*pDest++ = (BYTE) (((WORD)newval) >> 8);
307310
}
308311
if (dwPos >= dwSize)
309312
{

0 commit comments

Comments
 (0)