Author: sagamusix
Date: Sun Apr 28 18:25:09 2024
New Revision: 20676
URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20676
Log:
Merged revision(s) 20675 from trunk/OpenMPT:
[Imp] DMF: Avoid spending a lot of time on reading non-existing pattern data.
........
Modified:
branches/OpenMPT-1.31/ (props changed)
branches/OpenMPT-1.31/soundlib/Load_dmf.cpp
Modified: branches/OpenMPT-1.31/soundlib/Load_dmf.cpp
==============================================================================
--- branches/OpenMPT-1.31/soundlib/Load_dmf.cpp Sun Apr 28 18:24:28 2024 (r20675)
+++ branches/OpenMPT-1.31/soundlib/Load_dmf.cpp Sun Apr 28 18:25:09 2024 (r20676)
@@ -346,7 +346,7 @@
// Counters for channel packing (including global track)
std::vector<uint8> channelCounter(numChannels + 1, 0);
- for(ROWINDEX row = 0; row < numRows; row++)
+ for(ROWINDEX row = 0; row < numRows && file.CanRead(1); row++)
{
// Global track info counter reached 0 => read global track data
if(channelCounter[0] == 0)
@@ -970,6 +970,8 @@
const uint8 headerSize = fileHeader.version < 3 ? 9 : 8;
chunk.Skip(headerSize - sizeof(uint32le));
const uint32 patLength = chunk.ReadUint32LE();
+ if(!chunk.CanRead(patLength))
+ return false;
chunk.SkipBack(headerSize);
patternChunk = chunk.ReadChunk(headerSize + patLength);
}
|