From: <sv...@op...> - 2024-06-23 12:05:14
|
Author: sagamusix Date: Sun Jun 23 14:05:01 2024 New Revision: 21055 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21055 Log: [Fix] FTM: Avoid integer overflow in pattern+row calculation, eventually leading to addressing a negative pattern row (found with afl++). Modified: trunk/OpenMPT/soundlib/Load_ftm.cpp Modified: trunk/OpenMPT/soundlib/Load_ftm.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_ftm.cpp Sun Jun 23 11:35:43 2024 (r21054) +++ trunk/OpenMPT/soundlib/Load_ftm.cpp Sun Jun 23 14:05:01 2024 (r21055) @@ -383,9 +383,9 @@ } const auto position = std::div(globalRow + spacing, fileHeader.rowsPerMeasure); - PATTERNINDEX pat = static_cast<PATTERNINDEX>(position.quot); - if(pat >= Patterns.GetNumPatterns()) + if(position.quot >= fileHeader.numMeasures) break; + const PATTERNINDEX pat = static_cast<PATTERNINDEX>(position.quot); ModCommand &m = *Patterns[pat].GetpModCommand(position.rem, chn); const uint8 param = ((data[0] & 0x0F) << 2) | (data[1] >> 6); // 0...63 |