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++) {
|
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);
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user