File 0003-Fail-expression-lookup-on-invalid-atoms.patch of Package xkbcomp.41931

From 895e080b237e346a43a31edf9dee6143c2abf230 Mon Sep 17 00:00:00 2001
From: Daniel Stone <daniels@collabora.com>
Date: Mon, 30 Oct 2017 11:21:55 +0000
Subject: [PATCH 3/5] Fail expression lookup on invalid atoms

If we fail atom lookup, then we should not claim that we successfully
looked up the expression.

CVE-2018-15859

Identical to libxkbcommon commit bb4909d2d8fa6b08155e449986a478101e2b2634
https://github.com/xkbcommon/libxkbcommon/commit/bb4909d2d8fa6b08155e449986a478101e2b2634

Part-of: <https://gitlab.freedesktop.org/xorg/app/xkbcomp/-/merge_requests/38>
---
 expr.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Index: xkbcomp-1.4.1/expr.c
===================================================================
--- xkbcomp-1.4.1.orig/expr.c
+++ xkbcomp-1.4.1/expr.c
@@ -142,11 +142,15 @@ ExprResolveLhs(ExprDef * expr,
         elem_rtrn->str = XkbAtomGetString(NULL, expr->value.field.element);
         field_rtrn->str = XkbAtomGetString(NULL, expr->value.field.field);
         *index_rtrn = NULL;
-        return True;
+        return (elem_rtrn->str != NULL && field_rtrn->str != NULL);
     case ExprArrayRef:
         elem_rtrn->str = XkbAtomGetString(NULL, expr->value.array.element);
         field_rtrn->str = XkbAtomGetString(NULL, expr->value.array.field);
         *index_rtrn = expr->value.array.entry;
+        if (expr->value.array.element != None && elem_rtrn->str == NULL)
+            return False;
+        if (field_rtrn->str == NULL)
+            return False;
         return True;
     }
     WSGO1("Unexpected operator %d in ResolveLhs\n", expr->op);
openSUSE Build Service is sponsored by