]> git.mdlowis.com Git - proto/labwc.git/commitdiff
keyboard: Fix SIGSEGV that showed up in out-of-memory fuzzing
authorJohn Lindgren <john@jlindgren.net>
Sat, 17 Sep 2022 18:47:47 +0000 (14:47 -0400)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Sun, 18 Sep 2022 04:05:16 +0000 (06:05 +0200)
Stack trace:

    #0  xkb_keymap_ref (keymap=keymap@entry=0x0) at ../libxkbcommon/src/keymap.c:61
    #1  0x00007f53a344ab99 in wlr_keyboard_set_keymap (kb=kb@entry=0x5571af8cb9a0, keymap=keymap@entry=0x0)
        at ../types/wlr_keyboard.c:174
    #2  0x00005571ade057e0 in keyboard_init (seat=0x7ffca0389680) at ../src/keyboard.c:229
    #3  seat_init (server=0x7ffca0389570) at ../src/seat.c:307
    #4  server_init (server=0x7ffca0389570) at ../src/server.c:308

src/keyboard.c

index 364e80486284ba4bae7bb17bf012532a5c466d64..2f0dd66d886a1221cf9316ae05a4577a4c2424e5 100644 (file)
@@ -226,8 +226,12 @@ keyboard_init(struct seat *seat)
        struct xkb_context *context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
        struct xkb_keymap *keymap = xkb_map_new_from_names(context, &rules,
                XKB_KEYMAP_COMPILE_NO_FLAGS);
-       wlr_keyboard_set_keymap(kb, keymap);
-       xkb_keymap_unref(keymap);
+       if (keymap) {
+               wlr_keyboard_set_keymap(kb, keymap);
+               xkb_keymap_unref(keymap);
+       } else {
+               wlr_log(WLR_ERROR, "Failed to create xkb keymap");
+       }
        xkb_context_unref(context);
        wlr_keyboard_set_repeat_info(kb, rc.repeat_rate, rc.repeat_delay);