From: Ran Benita Date: Sun, 15 Jul 2012 11:35:57 +0000 (+0300) Subject: map: verifiy that the keycode is legal X-Git-Tag: xkbcommon-0.2.0~423 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=35a93b8e6496a6cd5623cc2c332dc4f5ea2a4f11;p=platform%2Fupstream%2Flibxkbcommon.git map: verifiy that the keycode is legal In case someone passes in a bad keycode. Signed-off-by: Ran Benita --- diff --git a/src/map.c b/src/map.c index 1cbbc38..a91eba4 100644 --- a/src/map.c +++ b/src/map.c @@ -247,10 +247,14 @@ xkb_key_get_level(struct xkb_state *state, xkb_keycode_t kc, unsigned int group) { struct xkb_keymap *keymap = xkb_state_get_map(state); - struct xkb_key_type *type = XkbKeyType(keymap, kc, group); + struct xkb_key_type *type; struct xkb_kt_map_entry *entry; unsigned int active_mods; + if (!XkbKeycodeInRange(keymap, kc)) + return 0; + + type = XkbKeyType(keymap, kc, group); active_mods = xkb_state_serialize_mods(state, XKB_STATE_EFFECTIVE); active_mods &= type->mods.mask; @@ -271,7 +275,11 @@ xkb_key_get_group(struct xkb_state *state, xkb_keycode_t kc) { struct xkb_keymap *keymap = xkb_state_get_map(state); unsigned int ret = xkb_state_serialize_group(state, XKB_STATE_EFFECTIVE); - struct xkb_key *key = XkbKey(keymap, kc); + struct xkb_key *key; + + if (!XkbKeycodeInRange(keymap, kc)) + return 0; + key = XkbKey(keymap, kc); if (ret < key->num_groups) return ret; @@ -336,7 +344,7 @@ xkb_key_get_syms(struct xkb_state *state, xkb_keycode_t kc, int group; int level; - if (!state || kc < keymap->min_key_code || kc > keymap->max_key_code) + if (!state || !XkbKeycodeInRange(keymap, kc)) return -1; group = xkb_key_get_group(state, kc);