From: <sv...@op...> - 2024-08-09 17:39:29
|
Author: sagamusix Date: Fri Aug 9 19:39:21 2024 New Revision: 21373 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21373 Log: [Fix] MED: Fix pattern index explosion with multiple subsongs (fixes MED.Aria, https://www.un4seen.com/forum/?topic=15448.msg143464#msg143464). Modified: trunk/OpenMPT/soundlib/Load_med.cpp Modified: trunk/OpenMPT/soundlib/Load_med.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Load_med.cpp Thu Aug 8 23:42:59 2024 (r21372) +++ trunk/OpenMPT/soundlib/Load_med.cpp Fri Aug 9 19:39:21 2024 (r21373) @@ -1651,8 +1651,8 @@ order[from] = pat; } Patterns[pat].WriteEffect(EffectWriter(CMD_POSITIONJUMP, mpt::saturate_cast<ModCommand::PARAM>(to)).Row(Patterns[pat].GetNumRows() - 1).RetryPreviousRow()); - if(pat >= numPatterns) - numPatterns = pat + 1; + if(pat >= basePattern && (pat - basePattern) >= numPatterns) + numPatterns = pat - basePattern + 1; } if(numSongs > 1) @@ -1665,8 +1665,8 @@ Patterns[firstPat].WriteEffect(EffectWriter(CMD_CHANNELVOLUME, static_cast<ModCommand::PARAM>(ChnSettings[chn].nVolume)).Channel(chn).RetryNextRow()); Patterns[firstPat].WriteEffect(EffectWriter(CMD_PANNING8, mpt::saturate_cast<ModCommand::PARAM>(ChnSettings[chn].nPan)).Channel(chn).RetryNextRow()); } - if(firstPat >= numPatterns) - numPatterns = firstPat + 1; + if(firstPat >= basePattern && (firstPat - basePattern) >= numPatterns) + numPatterns = firstPat - basePattern + 1; } } |