Skip to content

Commit 71efd96

Browse files
committed
Fix more issues from the fuzz-patch-1/oob_read_fixes merge.
* MDL: tweaked oob_read_fixes check at 305 to break from loop. * MDL: oob_read_fixes check at 313 and fuzz-patch-1 check at 309 are redundant. Removed 313 since 309 is outside of the loop. * MT2: the oob_read_fixes check at line 291 was kind of broken. Replaced with the fuzz-patch-1 variant of that check. * MT2: combine the two checks on line 563.
1 parent 22430ee commit 71efd96

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

src/load_mdl.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -303,15 +303,14 @@ BOOL CSoundFile::ReadMDL(const BYTE *lpStream, DWORD dwMemLength)
303303
if ((Headers[nins] = new INSTRUMENTHEADER) == NULL) break;
304304
INSTRUMENTHEADER *penv = Headers[nins];
305305
memset(penv, 0, sizeof(INSTRUMENTHEADER));
306-
if (dwPos < dwMemLength - 34)
307-
memcpy(penv->name, lpStream+dwPos+2, 32);
306+
if (dwPos > dwMemLength - 34) break;
307+
memcpy(penv->name, lpStream+dwPos+2, 32);
308308
penv->nGlobalVol = 64;
309309
penv->nPPC = 5*12;
310310
if (34 + 14u*lpStream[dwPos+1] > dwMemLength - dwPos) break;
311311
for (j=0; j<lpStream[dwPos+1]; j++)
312312
{
313313
const BYTE *ps = lpStream+dwPos+34+14*j;
314-
if (dwPos+34+14*j >= dwMemLength - 12) break;
315314
while ((note < (UINT)(ps[1]+12)) && (note < NOTE_MAX))
316315
{
317316
penv->NoteMap[note] = note+1;

src/load_mt2.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ BOOL CSoundFile::ReadMT2(LPCBYTE lpStream, DWORD dwMemLength)
288288
const MT2PATTERN *pmp = (MT2PATTERN *)(lpStream+dwMemPos);
289289
UINT wDataLen = (pmp->wDataLen + 1) & ~1;
290290
dwMemPos += 6;
291-
if (dwMemLength - wDataLen > dwMemLength || dwMemPos + wDataLen > dwMemLength) break;
291+
if (dwMemPos > dwMemLength - wDataLen || wDataLen > dwMemLength) break;
292292

293293
UINT nLines = pmp->wLines;
294294
if ((iPat < MAX_PATTERNS) && (nLines > 0) && (nLines <= 256))
@@ -560,7 +560,7 @@ BOOL CSoundFile::ReadMT2(LPCBYTE lpStream, DWORD dwMemLength)
560560
m_nSamples = (pfh->wSamples < MAX_SAMPLES) ? pfh->wSamples : MAX_SAMPLES-1;
561561
for (UINT iSmp=1; iSmp<=256; iSmp++)
562562
{
563-
if (dwMemPos+36 > dwMemLength || dwMemPos > dwMemLength) return TRUE;
563+
if (dwMemPos > dwMemLength - 36) return TRUE;
564564
const MT2SAMPLE *pms = (MT2SAMPLE *)(lpStream+dwMemPos);
565565
#ifdef MT2DEBUG
566566
if (iSmp <= m_nSamples) Log(" Sample #%d at offset %04X: %d bytes\n", iSmp, dwMemPos, pms->dwDataLen);

0 commit comments

Comments
 (0)