fix out-of-bounds access to consumed[]

This commit is contained in:
save196
2026-11-09 22:25:17 +02:00
parent 8ab0c16f3c
commit 86a30c4af2
2 changed files with 4 additions and 3 deletions
+1 -1
View File
@@ -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);
+2 -1
View File
@@ -1835,6 +1835,7 @@ 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) {
if (event->keycode < LENGTH(consumed))
consumed[event->keycode] = 1;
key->func(&key->arg);
handled = 1;
@@ -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 */