From da964532709cceb3a1e69c6eb8eb89a384649858 Mon Sep 17 00:00:00 2001 From: Ran Benita Date: Sun, 11 Mar 2018 17:07:06 +0200 Subject: [PATCH 07/10] xkbcomp: fix crash when parsing an xkb_geometry section xkb_geometry sections are ignored; previously the had done so by returning NULL for the section's XkbFile, however some sections of the code do not expect this. Instead, create an XkbFile for it, it will never be processes and discarded later. Caught with the afl fuzzer. Signed-off-by: Ran Benita (cherry picked from commit 917636b1d0d70205a13f89062b95e3a0fc31d4ff) --- src/xkbcomp/keymap.c | 9 +++++++-- src/xkbcomp/parser.y | 9 +-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/xkbcomp/keymap.c b/src/xkbcomp/keymap.c index 45098c2..e95e50c 100644 --- a/src/xkbcomp/keymap.c +++ b/src/xkbcomp/keymap.c @@ -241,8 +241,13 @@ CompileKeymap(XkbFile *file, struct xkb_keymap *keymap, enum merge_mode merge) file = (XkbFile *) file->common.next) { if (file->file_type < FIRST_KEYMAP_FILE_TYPE || file->file_type > LAST_KEYMAP_FILE_TYPE) { - log_err(ctx, "Cannot define %s in a keymap file\n", - xkb_file_type_to_string(file->file_type)); + if (file->file_type == FILE_TYPE_GEOMETRY) { + log_vrb(ctx, 1, + "Geometry sections are not supported; ignoring\n"); + } else { + log_err(ctx, "Cannot define %s in a keymap file\n", + xkb_file_type_to_string(file->file_type)); + } continue; } diff --git a/src/xkbcomp/parser.y b/src/xkbcomp/parser.y index b5b0c2c..cedb8fa 100644 --- a/src/xkbcomp/parser.y +++ b/src/xkbcomp/parser.y @@ -273,14 +273,7 @@ XkbMapConfig : OptFlags FileType OptMapName OBRACE DeclList CBRACE SEMI { - if ($2 == FILE_TYPE_GEOMETRY) { - free($3); - FreeStmt($5); - $$ = NULL; - } - else { - $$ = XkbFileCreate($2, $3, $5, $1); - } + $$ = XkbFileCreate($2, $3, $5, $1); } ; -- 2.20.1