diff options
author | link2xt <link2xt@testrun.org> | 2023-11-19 06:53:02 +0000 |
---|---|---|
committer | Leonardo Hernández <leohdz172@proton.me> | 2023-11-19 01:14:35 -0600 |
commit | b4da97446aafba04ac10062b16f343ac95a81e90 (patch) | |
tree | e10d456ed3b3c884bcf2182b94517402df4f906e | |
parent | d6fabe3a150d2e464078c3269410d56e8bbeb54f (diff) |
createkeyboard: do not segfault if xkb_keymap_new_from_names returns NULL
Passing NULL to wlr_keyboard_set_keymap results in a segfault.
Example:
Thread 1 "dwl" received signal SIGSEGV, Segmentation fault.
0x00007ffff7e49b64 in xkb_keymap_ref () from /usr/lib/libxkbcommon.so.0
(gdb) bt
#0 0x00007ffff7e49b64 in xkb_keymap_ref () at /usr/lib/libxkbcommon.so.0
#1 0x00007ffff7f06389 in wlr_keyboard_set_keymap () at /usr/lib/libwlroots.so.11
#2 0x000055555555bc54 in createkeyboard ()
#3 0x000055555555c283 in inputdevice ()
#4 0x00007ffff7e8101e in wl_signal_emit_mutable () at /usr/lib/libwayland-server.so.0
#5 0x00007ffff7e8101e in wl_signal_emit_mutable () at /usr/lib/libwayland-server.so.0
#6 0x00007ffff7edb52c in () at /usr/lib/libwlroots.so.11
#7 0x00007ffff7ee44b6 in () at /usr/lib/libwlroots.so.11
#8 0x000055555555fe66 in main ()
-rw-r--r-- | dwl.c | 2 |
1 files changed, 2 insertions, 0 deletions
@@ -802,6 +802,8 @@ createkeyboard(struct wlr_keyboard *keyboard) context = xkb_context_new(XKB_CONTEXT_NO_FLAGS); keymap = xkb_keymap_new_from_names(context, &xkb_rules, XKB_KEYMAP_COMPILE_NO_FLAGS); + if (!keymap) + die("createkeyboard: failed to compile keymap"); wlr_keyboard_set_keymap(keyboard, keymap); xkb_keymap_unref(keymap); |