Commit 5547a82f2a6ed752fea3ce9a531b13801be3a54a

Ran Benita 2014-02-07T21:12:53

parser: fix unrecognized keysym handling Integer may be negative, so also need to test >= 0. Also, $$ was left uninitialized if the keysym wasn't recognized. Signed-off-by: Ran Benita <ran234@gmail.com>

diff --git a/src/xkbcomp/parser.y b/src/xkbcomp/parser.y
index 20ece28..5652ddf 100644
--- a/src/xkbcomp/parser.y
+++ b/src/xkbcomp/parser.y
@@ -710,14 +710,20 @@ KeySym          :       IDENT
                 |       SECTION { $$ = XKB_KEY_section; }
                 |       Integer
                         {
-                            if ($1 < 10) {      /* XKB_KEY_0 .. XKB_KEY_9 */
-                                $$ = XKB_KEY_0 + $1;
+                            if ($1 < 0) {
+                                parser_warn(param, "unrecognized keysym");
+                                $$ = XKB_KEY_NoSymbol;
+                            }
+                            else if ($1 < 10) {      /* XKB_KEY_0 .. XKB_KEY_9 */
+                                $$ = XKB_KEY_0 + (xkb_keysym_t) $1;
                             }
                             else {
                                 char buf[17];
                                 snprintf(buf, sizeof(buf), "0x%x", $1);
-                                if (!resolve_keysym(buf, &$$))
+                                if (!resolve_keysym(buf, &$$)) {
                                     parser_warn(param, "unrecognized keysym");
+                                    $$ = XKB_KEY_NoSymbol;
+                                }
                             }
                         }
                 ;