From 455fc1f79f4afa5bb5f3c809a9c65196c20ff1a0 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sun, 26 Feb 2017 12:43:06 +0100 Subject: [PATCH] Proper skipping of hidden menu lines, old code accessed mstate_tab[] out of bounds (#4491) --- radio/src/gui/128x64/model_display.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/radio/src/gui/128x64/model_display.cpp b/radio/src/gui/128x64/model_display.cpp index 4b4bd5345..eaf02b49b 100644 --- a/radio/src/gui/128x64/model_display.cpp +++ b/radio/src/gui/128x64/model_display.cpp @@ -82,6 +82,24 @@ void onTelemetryScriptFileSelectionMenu(const char *result) } #endif + +int skipHiddenLines(int noRows, const uint8_t * mstate_tab, int Row) +{ + for(int i=0; i %d", Row, i); + return i; + } + --Row; + } + } + return -1; +} + +// #define SKIP_HIDDEN_MENU_ROWS(row) row = skipHiddenLines((int)DIM(mstate_tab), mstate_tab, row); if (row < 0) return; +#define SKIP_HIDDEN_MENU_ROWS(row) if ((row = skipHiddenLines((int)DIM(mstate_tab), mstate_tab, row)) < 0) return; + void menuModelDisplay(event_t event) { MENU(STR_MENU_DISPLAY, menuTabModel, MENU_MODEL_DISPLAY, HEADER_LINE + ITEM_DISPLAY_MAX, { HEADER_LINE_COLUMNS TELEMETRY_SCREEN_ROWS(0), TELEMETRY_SCREEN_ROWS(1), TELEMETRY_SCREEN_ROWS(2), TELEMETRY_SCREEN_ROWS(3) }); @@ -91,11 +109,7 @@ void menuModelDisplay(event_t event) for (uint8_t i=0; i0) ? BLINK|INVERS : INVERS); LcdFlags attr = (sub == k ? blink : 0);