From: <sv...@op...> - 2024-04-22 21:01:11
|
Author: sagamusix Date: Mon Apr 22 23:01:04 2024 New Revision: 20650 URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=20650 Log: [Fix] MIDI macro command s didn't compute correct checksum if a device ID was made up from two bytes (e.g. XV-5080). Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp Modified: trunk/OpenMPT/soundlib/Snd_fx.cpp ============================================================================== --- trunk/OpenMPT/soundlib/Snd_fx.cpp Mon Apr 22 22:50:56 2024 (r20649) +++ trunk/OpenMPT/soundlib/Snd_fx.cpp Mon Apr 22 23:01:04 2024 (r20650) @@ -5173,12 +5173,17 @@ { // SysEx Checksum (not an original Impulse Tracker macro variable, but added for convenience) auto startPos = outPos; - while(startPos > 0 && out[--startPos] != 0xF0); - if(outPos - startPos < 5 || out[startPos] != 0xF0) - { + while(startPos > 0 && out[--startPos] != 0xF0) + ; + + if(outPos - startPos < 3 || out[startPos] != 0xF0) continue; - } - for(auto p = startPos + 5u; p != outPos; p++) + + uint8 checksumStart = out[startPos + 3] ? 5 : 6; + if(outPos - startPos < checksumStart) + continue; + + for(auto p = startPos + checksumStart; p != outPos; p++) { data += out[p]; } |