gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit 567b9c44ab7234e68f676fb24a7ecd0924f2633e
parent 635ee4c2342be5c8dc8b8d8c0fec566eec8f340a
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date:   Wed, 31 Jul 2024 12:53:21 +0200

fix invalid presets being parsed

Diffstat:
Msource/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp | 11+++++++++--
Msource/nord/n2x/n2xLib/n2xmiditypes.h | 4++++
2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp b/source/nord/n2x/n2xJucePlugin/n2xPatchManager.cpp @@ -50,15 +50,22 @@ namespace n2xJucePlugin const auto bank = _sysex[n2x::SysexIndex::IdxMsgType]; const auto program = _sysex[n2x::SysexIndex::IdxMsgSpec]; + if(program >= n2x::g_programsPerBank) + return {}; + char name[128]{0}; if(isSingle) { - (void)snprintf(name, sizeof(name), "%c.%02d", bank == n2x::SingleDumpBankEditBuffer ? 'e' : ('1' + bank), program); + if(bank < n2x::SysexByte::SingleDumpBankEditBuffer || bank > (n2x::SysexByte::SingleDumpBankEditBuffer + n2x::g_singleBankCount)) + return {}; + (void)snprintf(name, sizeof(name), "%c.%02d", bank == n2x::SingleDumpBankEditBuffer ? 'e' : '0' + (bank - n2x::SysexByte::SingleDumpBankEditBuffer), program); } else { - (void)snprintf(name, sizeof(name), "P%c.%02d", bank == n2x::MultiDumpBankEditBuffer ? 'e' : ('1' + bank), program); + if(bank < n2x::SysexByte::MultiDumpBankEditBuffer || bank > (n2x::SysexByte::MultiDumpBankEditBuffer + n2x::g_multiBankCount)) + return {}; + (void)snprintf(name, sizeof(name), "P%c.%02d", bank == n2x::MultiDumpBankEditBuffer ? 'e' : '0' + (bank - n2x::SysexByte::MultiDumpBankEditBuffer), program); } p->name = name; diff --git a/source/nord/n2x/n2xLib/n2xmiditypes.h b/source/nord/n2x/n2xLib/n2xmiditypes.h @@ -34,4 +34,8 @@ namespace n2x static constexpr uint32_t g_singleDumpSize = g_singleDataSize + g_sysexContainerSize; static constexpr uint32_t g_multiDumpSize = g_multiDataSize + g_sysexContainerSize; static constexpr uint32_t g_patchRequestSize = g_sysexContainerSize; + + static constexpr uint32_t g_singleBankCount = 10; + static constexpr uint32_t g_multiBankCount = 4; + static constexpr uint32_t g_programsPerBank = 99; }