From: <sv...@op...> - 2024-04-28 16:25:21
|
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); } |