From f872f1c591aec429dbb3ee48f03a611af411f06b Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 8 Apr 2026 18:50:47 -0500 Subject: [PATCH] Ignore modes out of range in VialRGB controller --- .../QMKVialRGBController/RGBController_QMKVialRGB.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp b/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp index 25c7980e..df74e814 100644 --- a/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp +++ b/Controllers/QMKController/QMKVialRGBController/RGBController_QMKVialRGB.cpp @@ -20,6 +20,8 @@ typedef struct bool has_speed; } vialrgb_mode; +#define VIALRGB_NUM_MODES (sizeof(vialrgb_modes) / sizeof(vialrgb_mode)) + static const vialrgb_mode vialrgb_modes[] = { { VIALRGB_EFFECT_OFF, "Off", false }, @@ -85,9 +87,16 @@ RGBController_QMKVialRGB::RGBController_QMKVialRGB(QMKVialRGBController* control \*-----------------------------------------------------*/ for(std::size_t effect_idx = 0; effect_idx < controller->GetEffectCount(); effect_idx++) { - mode new_mode; - new_mode.name = vialrgb_modes[controller->GetEffect(effect_idx)].name; - new_mode.value = vialrgb_modes[controller->GetEffect(effect_idx)].value; + unsigned short mode_index = controller->GetEffect(effect_idx); + mode new_mode; + + if(mode_index > VIALRGB_NUM_MODES) + { + continue; + } + + new_mode.name = vialrgb_modes[mode_index].name; + new_mode.value = vialrgb_modes[mode_index].value; if(new_mode.value == VIALRGB_EFFECT_DIRECT) { @@ -104,7 +113,7 @@ RGBController_QMKVialRGB::RGBController_QMKVialRGB(QMKVialRGBController* control new_mode.colors.resize(1); } - if(vialrgb_modes[controller->GetEffect(effect_idx)].has_speed) + if(vialrgb_modes[mode_index].has_speed) { new_mode.flags |= MODE_FLAG_HAS_SPEED; new_mode.speed_min = 0;