xkbcomp: Don't crash on no-op modmask expressions
authorDaniel Stone <daniels@collabora.com>
Mon, 26 Jun 2017 16:12:29 +0000 (17:12 +0100)
committerDaniel Stone <daniels@collabora.com>
Fri, 3 Aug 2018 15:13:35 +0000 (16:13 +0100)
If we have an expression of the form 'l1' in an interp section, we
unconditionally try to dereference its args, even if it has none.

Signed-off-by: Daniel Stone <daniels@collabora.com>
src/xkbcomp/compat.c

index 9ae26cd..bd587c8 100644 (file)
@@ -264,7 +264,8 @@ ResolveStateAndPredicate(ExprDef *expr, enum xkb_match_operation *pred_rtrn,
     *pred_rtrn = MATCH_EXACTLY;
     if (expr->expr.op == EXPR_ACTION_DECL) {
         const char *pred_txt = xkb_atom_text(info->ctx, expr->action.name);
-        if (!LookupString(symInterpretMatchMaskNames, pred_txt, pred_rtrn)) {
+        if (!LookupString(symInterpretMatchMaskNames, pred_txt, pred_rtrn) ||
+            !expr->action.args) {
             log_err(info->ctx,
                     "Illegal modifier predicate \"%s\"; Ignored\n", pred_txt);
             return false;