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];
}
|