From 4e9043ad6d3c92b2e3db442badf085451bd347d2 Mon Sep 17 00:00:00 2001 From: Levi Neely <141506390+lneely@users.noreply.github.com> Date: Wed, 13 May 2026 21:44:30 +0200 Subject: [PATCH] Guard xkb_state against NULL in handle_keyboard_key Key events can arrive before the keyboard's xkb_state is initialized. --- src/backend/wayland/wl_backend.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index 71eee87..1028b9b 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -1644,11 +1644,16 @@ handle_keyboard_key(struct wl_listener *listener, void *data) ev.u.key.y_root = wl_state.pointer_y; /* Translate keycode → keysym + UTF-8 via xkb */ - ev.u.key.keysym = xkb_state_key_get_one_sym(kb->xkb_state, keycode); - ev.u.key.utf8_len = xkb_state_key_get_utf8(kb->xkb_state, keycode, - ev.u.key.utf8, sizeof(ev.u.key.utf8)); - if (ev.u.key.utf8_len >= (int)sizeof(ev.u.key.utf8)) - ev.u.key.utf8_len = 0; /* overflow — discard */ + if (kb->xkb_state) { + ev.u.key.keysym = xkb_state_key_get_one_sym(kb->xkb_state, keycode); + ev.u.key.utf8_len = xkb_state_key_get_utf8(kb->xkb_state, keycode, + ev.u.key.utf8, sizeof(ev.u.key.utf8)); + if (ev.u.key.utf8_len >= (int)sizeof(ev.u.key.utf8)) + ev.u.key.utf8_len = 0; + } else { + ev.u.key.keysym = 0; + ev.u.key.utf8_len = 0; + } W_WL_EnqueueEvent(wmscr, &ev, NULL); }