For some reason keycodes were listed under mapFlags in the yylval union.
Fix it and some sanity checks.
Signed-off-by: Ran Benita <ran234@gmail.com>
}
KeycodeDef *
-KeycodeCreate(xkb_atom_t name, unsigned long value)
+KeycodeCreate(xkb_atom_t name, int64_t value)
{
KeycodeDef *def;
ExprCreateBinary(enum expr_op_type op, ExprDef *left, ExprDef *right);
KeycodeDef *
-KeycodeCreate(xkb_atom_t name, unsigned long value);
+KeycodeCreate(xkb_atom_t name, int64_t value);
KeyAliasDef *
KeyAliasCreate(xkb_atom_t alias, xkb_atom_t real);
ParseCommon common;
enum merge_mode merge;
xkb_atom_t name;
- unsigned long value;
+ int64_t value;
} KeycodeDef;
typedef struct _KeyAliasDef {
return (info->errorCount == 0);
}
-static int
+static bool
HandleKeycodeDef(KeyNamesInfo *info, KeycodeDef *stmt, enum merge_mode merge)
{
if (stmt->merge != MERGE_DEFAULT) {
merge = stmt->merge;
}
+ if (stmt->value < 0 || stmt->value > XKB_KEYCODE_MAX) {
+ log_err(info->ctx,
+ "Illegal keycode %lld: must be between 0..%u; "
+ "Key ignored\n", stmt->value, XKB_KEYCODE_MAX);
+ return false;
+ }
+
return AddKeyName(info, stmt->value, stmt->name, merge,
info->file_id, true);
}
%type <num> INTEGER FLOAT
%type <str> IDENT STRING
%type <sval> KEYNAME
+%type <num> KeyCode
%type <ival> Number Integer Float SignedNumber
%type <merge> MergeMode OptMergeMode
%type <file_type> XkbCompositeType FileType
%type <uval> DoodadType
-%type <mapFlags> Flag Flags OptFlags KeyCode
+%type <mapFlags> Flag Flags OptFlags
%type <str> MapName OptMapName KeySym
%type <sval> FieldSpec Ident Element String
%type <any> DeclList Decl