mirror of
https://codeberg.org/dwl/dwl.git
synced 2026-11-11 15:43:13 +00:00
fix out-of-bounds access to consumed[]
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user