diff --git a/client.h b/client.h index ebe665b..bea7a97 100644 --- a/client.h +++ b/client.h @@ -279,7 +279,7 @@ client_notify_enter(struct wlr_surface *s, struct wlr_keyboard *kb) } for (size_t i = 0; i < kb->num_keycodes; i++) { uint32_t key = kb->keycodes[i]; - if (!consumed[key]) + if (key >= LENGTH(consumed) || !consumed[key]) filtered[size++] = key; } wlr_seat_keyboard_notify_enter(seat, s, filtered, size, &kb->modifiers); diff --git a/dwl.c b/dwl.c index e4c1ce2..bb7cf77 100644 --- a/dwl.c +++ b/dwl.c @@ -1835,7 +1835,8 @@ keypress(struct wl_listener *listener, void *data) for (int i = 0; i < 2; i++) { const Key *key = keybinding(group->mods, group->keysyms[i]); if (key) { - consumed[event->keycode] = 1; + if (event->keycode < LENGTH(consumed)) + consumed[event->keycode] = 1; key->func(&key->arg); handled = 1; break; @@ -1852,7 +1853,7 @@ keypress(struct wl_listener *listener, void *data) if (handled || input_method_keyboard_grab_forward_key(group, event)) return; - if (consumed[event->keycode]) { + if (event->keycode < LENGTH(consumed) && consumed[event->keycode]) { if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED) consumed[event->keycode] = 0; return; /* Don't pass to the client the release event of a handled key-press */