parser: fix unrecognized keysym handling
authorRan Benita <ran234@gmail.com>
Fri, 7 Feb 2014 19:12:53 +0000 (21:12 +0200)
committerRan Benita <ran234@gmail.com>
Fri, 7 Feb 2014 22:11:44 +0000 (00:11 +0200)
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>
src/xkbcomp/parser.y

index 20ece28..5652ddf 100644 (file)
@@ -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;
+                                }
                             }
                         }
                 ;