Skip to content

Commit f1d5fc7

Browse files
committed
fix(keymap): Fix overflow in get/set bindings (zmkfirmware#3205)
With the binding referenced to as uint8_t the keymap would be incorrect if more than 256 positions were in use, going to a uint16_t gives large enough headroom to not have to worry
1 parent 7f6b1fd commit f1d5fc7

2 files changed

Lines changed: 5 additions & 5 deletions

File tree

app/include/zmk/keymap.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ int zmk_keymap_layer_to(zmk_keymap_layer_id_t layer);
4242
const char *zmk_keymap_layer_name(zmk_keymap_layer_id_t layer);
4343

4444
const struct zmk_behavior_binding *zmk_keymap_get_layer_binding_at_idx(zmk_keymap_layer_id_t layer,
45-
uint8_t binding_idx);
46-
int zmk_keymap_set_layer_binding_at_idx(zmk_keymap_layer_id_t layer, uint8_t binding_idx,
45+
uint16_t binding_idx);
46+
int zmk_keymap_set_layer_binding_at_idx(zmk_keymap_layer_id_t layer, uint16_t binding_idx,
4747
const struct zmk_behavior_binding binding);
4848

4949
#if IS_ENABLED(CONFIG_ZMK_KEYMAP_LAYER_REORDERING)

app/src/keymap.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ const char *zmk_keymap_layer_name(zmk_keymap_layer_id_t layer_id) {
224224
}
225225

226226
const struct zmk_behavior_binding *
227-
zmk_keymap_get_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint8_t binding_idx) {
227+
zmk_keymap_get_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint16_t binding_idx) {
228228
if (binding_idx >= ZMK_KEYMAP_LEN) {
229229
return NULL;
230230
}
@@ -259,7 +259,7 @@ zmk_keymap_get_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint8_t bind
259259

260260
static uint8_t zmk_keymap_layer_pending_changes[ZMK_KEYMAP_LAYERS_LEN][PENDING_ARRAY_SIZE];
261261

262-
int zmk_keymap_set_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint8_t binding_idx,
262+
int zmk_keymap_set_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint16_t binding_idx,
263263
struct zmk_behavior_binding binding) {
264264
if (binding_idx >= ZMK_KEYMAP_LEN) {
265265
return -EINVAL;
@@ -304,7 +304,7 @@ int zmk_keymap_set_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint8_t
304304

305305
#else
306306

307-
int zmk_keymap_set_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint8_t binding_idx,
307+
int zmk_keymap_set_layer_binding_at_idx(zmk_keymap_layer_id_t layer_id, uint16_t binding_idx,
308308
struct zmk_behavior_binding binding) {
309309
return -ENOTSUP;
310310
}

0 commit comments

Comments
 (0)