From f2c9938a51d7acbc0efe707da6121696113b16d9 Mon Sep 17 00:00:00 2001 From: Alexandre Rostovtsev Date: Mon, 14 Sep 2015 08:42:44 -0400 Subject: [PATCH] keybindings: meta_backend_get_keymap() can return NULL And xkb_* functions segfault if given a NULL keymap. https://bugzilla.gnome.org/show_bug.cgi?id=754979 --- src/core/keybindings.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 981a012..3af08fb 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -197,6 +197,9 @@ reload_modmap (MetaKeyBindingManager *keys) { "Super", &keys->super_mask }, }; + if (!keymap) + return; + scratch_state = xkb_state_new (keymap); gsize i; @@ -298,6 +301,9 @@ get_keycodes_for_keysym (MetaKeyBindingManager *keys, xkb_layout_index_t i; xkb_level_index_t j; + if (!keymap) + goto out; + for (i = 0; i < xkb_keymap_num_layouts (keymap); i++) for (j = 0; j < keys->keymap_num_levels; j++) { @@ -354,7 +360,8 @@ determine_keymap_num_levels (MetaKeyBindingManager *keys) struct xkb_keymap *keymap = meta_backend_get_keymap (backend); keys->keymap_num_levels = 0; - xkb_keymap_key_for_each (keymap, determine_keymap_num_levels_iter, &keys->keymap_num_levels); + if (keymap) + xkb_keymap_key_for_each (keymap, determine_keymap_num_levels_iter, &keys->keymap_num_levels); } static void -- 2.5.2