Commit 397e7e013def98b751bd91eb2a0b8a614dd28e2b

Pierre Le Marre 2023-07-04T09:23:24

Fix xkb_keysym_from_name for numeric keysyms When parsing hexadecimal keysym using `xkb_keysym_from_name`, the result is limited by `parse_keysym_hex` to 0xffffffff, but the maximum keysym is XKB_MAX_KEYSYM, i.e. 0x1fffffff. Fixed by adding an upper bound.

1
2
3
4
5
6
7
8
9
10
11
12
13
diff --git a/src/keysym.c b/src/keysym.c
index 788b7a2..ef811bd 100644
--- a/src/keysym.c
+++ b/src/keysym.c
@@ -208,6 +208,8 @@ xkb_keysym_from_name(const char *name, enum xkb_keysym_flags flags)
     else if (name[0] == '0' && (name[1] == 'x' || (icase && name[1] == 'X'))) {
         if (!parse_keysym_hex(&name[2], &val))
             return XKB_KEY_NoSymbol;
+        if (val > XKB_KEYSYM_MAX)
+            return XKB_KEY_NoSymbol;
         return (xkb_keysym_t) val;
     }