|
From: <sag...@us...> - 2010-02-14 15:03:04
|
Revision: 494
http://modplug.svn.sourceforge.net/modplug/?rev=494&view=rev
Author: saga-games
Date: 2010-02-14 15:02:53 +0000 (Sun, 14 Feb 2010)
Log Message:
-----------
[Fix] ITP / J2B loader: Sample slot limits were not checked properly.
Modified Paths:
--------------
trunk/OpenMPT/soundlib/IT_DEFS.H
trunk/OpenMPT/soundlib/Load_it.cpp
trunk/OpenMPT/soundlib/load_j2b.cpp
Modified: trunk/OpenMPT/soundlib/IT_DEFS.H
===================================================================
--- trunk/OpenMPT/soundlib/IT_DEFS.H 2010-02-14 00:22:40 UTC (rev 493)
+++ trunk/OpenMPT/soundlib/IT_DEFS.H 2010-02-14 15:02:53 UTC (rev 494)
@@ -140,7 +140,8 @@
extern BYTE autovibit2xm[8];
extern BYTE autovibxm2it[8];
-#define ITP_VERSION 0x00000102 // v1.02
+#define ITP_VERSION 0x00000102 // v1.02
+#define ITP_FILE_ID 0x2e697470 // .itp ASCII
enum IT_ReaderBitMasks {
Modified: trunk/OpenMPT/soundlib/Load_it.cpp
===================================================================
--- trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-14 00:22:40 UTC (rev 493)
+++ trunk/OpenMPT/soundlib/Load_it.cpp 2010-02-14 15:02:53 UTC (rev 494)
@@ -450,8 +450,7 @@
// Check file ID
memcpy(&id,lpStream+streamPos,sizeof(DWORD));
- if(id != 0x2e697470) return false; // .itp
- m_nType = MOD_TYPE_IT;
+ if(id != ITP_FILE_ID) return false;
streamPos += sizeof(DWORD);
memcpy(&id,lpStream+streamPos,sizeof(DWORD));
@@ -461,6 +460,8 @@
if(version > ITP_VERSION)
return false;
+ m_nType = MOD_TYPE_IT;
+
// Song name
// name string length
@@ -736,6 +737,9 @@
nsmp = id;
streamPos += sizeof(DWORD);
+ if(nsmp < 1 || nsmp >= MAX_SAMPLES)
+ return false;
+
// Sample struct
memcpy(&pis,lpStream+streamPos,sizeof(ITSAMPLESTRUCT));
streamPos += sizeof(ITSAMPLESTRUCT);
@@ -1554,7 +1558,7 @@
// File ID
- DWORD id = 0x2e697470; // .itp ASCII
+ DWORD id = ITP_FILE_ID;
fwrite(&id, 1, sizeof(id), f);
id = ITP_VERSION;
Modified: trunk/OpenMPT/soundlib/load_j2b.cpp
===================================================================
--- trunk/OpenMPT/soundlib/load_j2b.cpp 2010-02-14 00:22:40 UTC (rev 493)
+++ trunk/OpenMPT/soundlib/load_j2b.cpp 2010-02-14 15:02:53 UTC (rev 494)
@@ -339,7 +339,7 @@
dwMemPos += sizeof(AMFFCHUNK_INSTRUMENT);
SAMPLEINDEX nSmp = inschunk->sample + 1;
- if(nSmp > MAX_SAMPLES)
+ if(nSmp >= MAX_SAMPLES)
break;
m_nSamples = max(m_nSamples, nSmp);
@@ -398,7 +398,7 @@
dwMemPos += dwHeadlen;
SAMPLEINDEX nSmp = instheadchunk->sample + 1;
- if(nSmp > MAX_SAMPLES)
+ if(nSmp >= MAX_SAMPLES)
break;
m_nSamples = max(m_nSamples, nSmp);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|