Fix xkb_keysym_from_name for numeric keysyms
authorPierre Le Marre <dev@wismill.eu>
Tue, 4 Jul 2023 07:23:24 +0000 (09:23 +0200)
committerWismill <dev@wismill.eu>
Fri, 14 Jul 2023 07:22:24 +0000 (09:22 +0200)
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.

src/keysym.c

index 788b7a2..ef811bd 100644 (file)
@@ -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;
     }