From ac561b9473559b7880bcf2510ae5a0ac5cabde7a Mon Sep 17 00:00:00 2001 From: Drashna Jaelre Date: Sat, 31 Dec 2022 16:55:14 -0800 Subject: [Bug] Prevent dynamic keymaps from processing layers that don't exist (#19225) --- quantum/action_layer.h | 1 + quantum/keymap_introspection.c | 4 ++++ 2 files changed, 5 insertions(+) (limited to 'quantum') diff --git a/quantum/action_layer.h b/quantum/action_layer.h index bd1085a70f..3fe2726529 100644 --- a/quantum/action_layer.h +++ b/quantum/action_layer.h @@ -25,6 +25,7 @@ along with this program. If not, see . # ifndef DYNAMIC_KEYMAP_LAYER_COUNT # define DYNAMIC_KEYMAP_LAYER_COUNT 4 # endif +# define MAX_LAYER DYNAMIC_KEYMAP_LAYER_COUNT # if DYNAMIC_KEYMAP_LAYER_COUNT <= 8 # ifndef LAYER_STATE_8BIT # define LAYER_STATE_8BIT diff --git a/quantum/keymap_introspection.c b/quantum/keymap_introspection.c index 93aab82fcc..1529ab9fe2 100644 --- a/quantum/keymap_introspection.c +++ b/quantum/keymap_introspection.c @@ -17,7 +17,11 @@ uint8_t keymap_layer_count(void) { return NUM_KEYMAP_LAYERS; } +#ifdef DYNAMIC_KEYMAP_ENABLE +_Static_assert(NUM_KEYMAP_LAYERS <= MAX_LAYER, "Number of keymap layers exceeds maximum set by DYNAMIC_KEYMAP_LAYER_COUNT"); +#else _Static_assert(NUM_KEYMAP_LAYERS <= MAX_LAYER, "Number of keymap layers exceeds maximum set by LAYER_STATE_(8|16|32)BIT"); +#endif uint16_t keycode_at_keymap_location_raw(uint8_t layer_num, uint8_t row, uint8_t column) { if (layer_num < NUM_KEYMAP_LAYERS && row < MATRIX_ROWS && column < MATRIX_COLS) { -- cgit v1.2.3