From 44e5d262a3dda8d33297cea8f0ded06109e6e7d3 Mon Sep 17 00:00:00 2001 From: elecpower Date: Fri, 18 Oct 2024 07:53:29 +1100 Subject: [PATCH] fix(cpn): function switches induced crash --- companion/src/firmwares/boardjson.cpp | 22 +++++++++---------- .../src/firmwares/customfunctiondata.cpp | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/companion/src/firmwares/boardjson.cpp b/companion/src/firmwares/boardjson.cpp index 8ae3c643f2a..f75ef048652 100644 --- a/companion/src/firmwares/boardjson.cpp +++ b/companion/src/firmwares/boardjson.cpp @@ -359,7 +359,7 @@ int BoardJson::getInputTypeOffset(const InputsTable * inputs, Board::AnalogInput return i; } - return 0; + return -1; } const Board::InputInfo BoardJson::getInputInfo(int index) const @@ -531,7 +531,7 @@ int BoardJson::getSwitchTypeOffset(const SwitchesTable * switches, Board::Switch return i; } - return 0; + return -1; } const int BoardJson::getSwitchYamlIndex(const QString val, YamlLookupType ylt) const @@ -629,7 +629,7 @@ const QString BoardJson::getTrimYamlName(int index, YamlLookupType ylt) const const bool BoardJson::isInputAvailable(int index) const { - return isInputAvailable(m_inputs->at(index)); + return (index >=0 && index < m_inputs->size()) ? isInputAvailable(m_inputs->at(index)) : false; } // static @@ -641,7 +641,7 @@ bool BoardJson::isInputAvailable(const InputDefn & defn) const bool BoardJson::isInputCalibrated(int index) const { - return isInputCalibrated(m_inputs->at(index)); + return (index >=0 && index < m_inputs->size()) ? isInputCalibrated(m_inputs->at(index)) : false; } // static @@ -652,7 +652,7 @@ bool BoardJson::isInputCalibrated(const InputDefn & defn) const bool BoardJson::isInputConfigurable(int index) const { - return isInputConfigurable(m_inputs->at(index)); + return (index >=0 && index < m_inputs->size()) ? isInputConfigurable(m_inputs->at(index)) : false; } // static @@ -663,7 +663,7 @@ bool BoardJson::isInputConfigurable(const InputDefn & defn) const bool BoardJson::isInputIgnored(int index) const { - return isInputIgnored(m_inputs->at(index)); + return (index >=0 && index < m_inputs->size()) ? isInputIgnored(m_inputs->at(index)) : true; } // static @@ -698,7 +698,7 @@ bool BoardJson::isInputFlexJoystickAxis(const InputDefn & defn) const bool BoardJson::isInputFlexPot(int index) const { - return isInputFlexPot(m_inputs->at(index)); + return (index >=0 && index < m_inputs->size()) ? isInputFlexPot(m_inputs->at(index)) : false; } // static @@ -741,7 +741,7 @@ bool BoardJson::isInputRTCBat(const InputDefn & defn) const bool BoardJson::isInputStick(int index) const { - return isInputStick(m_inputs->at(index)); + return (index >=0 && index < m_inputs->size()) ? isInputStick(m_inputs->at(index)) : false; } // static @@ -752,7 +752,7 @@ bool BoardJson::isInputStick(const InputDefn & defn) const bool BoardJson::isInputSwitch(int index) const { - return isInputSwitch(m_inputs->at(index)); + return (index >=0 && index < m_inputs->size()) ? isInputSwitch(m_inputs->at(index)) : false; } // static @@ -792,7 +792,7 @@ bool BoardJson::isSwitchStd(const SwitchDefn & defn) const bool BoardJson::isSwitchFlex(int index) const { - return isSwitchFlex(m_switches->at(index)); + return (index >=0 && index < m_switches->size()) ? isSwitchFlex(m_switches->at(index)) : false; } // static @@ -806,7 +806,7 @@ bool BoardJson::isSwitchFlex(const SwitchDefn & defn) const bool BoardJson::isSwitchFunc(int index) const { - return isSwitchFunc(m_switches->at(index)); + return (index >=0 && index < m_switches->size()) ? isSwitchFunc(m_switches->at(index)) : false; } // static diff --git a/companion/src/firmwares/customfunctiondata.cpp b/companion/src/firmwares/customfunctiondata.cpp index c1547ab2993..8c27f863170 100644 --- a/companion/src/firmwares/customfunctiondata.cpp +++ b/companion/src/firmwares/customfunctiondata.cpp @@ -132,7 +132,7 @@ QString CustomFunctionData::funcToString(const AssignFunc func, const ModelData return tr("RGB leds"); else if (func == FuncLCDtoVideo) return tr("LCD to Video"); - else if (func >= FuncPushCustomSwitch1 && func <= FuncPushCustomSwitchLast) { + else if (func >= FuncPushCustomSwitch1 && func <= FuncPushCustomSwitchLast && Boards::getCapability(getCurrentBoard(), Board::FunctionSwitches)) { const int idx = Boards::getSwitchTypeOffset(Board::SWITCH_FUNC) + func - FuncPushCustomSwitch1 + 1; return tr("Push Custom Switch %1").arg(RawSource(SOURCE_TYPE_SWITCH, idx).toString(model)); }