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++) { for (size_t i = 0; i < kb->num_keycodes; i++) {
uint32_t key = kb->keycodes[i]; uint32_t key = kb->keycodes[i];
if (!consumed[key]) if (key >= LENGTH(consumed) || !consumed[key])
filtered[size++] = key; filtered[size++] = key;
} }
wlr_seat_keyboard_notify_enter(seat, s, filtered, size, &kb->modifiers); 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++) { for (int i = 0; i < 2; i++) {
const Key *key = keybinding(group->mods, group->keysyms[i]); const Key *key = keybinding(group->mods, group->keysyms[i]);
if (key) { if (key) {
if (event->keycode < LENGTH(consumed))
consumed[event->keycode] = 1; consumed[event->keycode] = 1;
key->func(&key->arg); key->func(&key->arg);
handled = 1; handled = 1;
@@ -1852,7 +1853,7 @@ keypress(struct wl_listener *listener, void *data)
if (handled || input_method_keyboard_grab_forward_key(group, event)) if (handled || input_method_keyboard_grab_forward_key(group, event))
return; return;
if (consumed[event->keycode]) { if (event->keycode < LENGTH(consumed) && consumed[event->keycode]) {
if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED) if (event->state == WL_KEYBOARD_KEY_STATE_RELEASED)
consumed[event->keycode] = 0; consumed[event->keycode] = 0;
return; /* Don't pass to the client the release event of a handled key-press */ return; /* Don't pass to the client the release event of a handled key-press */