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 <ran234@gmail.com>
master
Ran Benita 2018-03-11 17:07:06 +02:00
parent e3cacae7b1
commit 917636b1d0
2 changed files with 8 additions and 10 deletions

View File

@ -241,8 +241,13 @@ CompileKeymap(XkbFile *file, struct xkb_keymap *keymap, enum merge_mode merge)
file = (XkbFile *) file->common.next) { file = (XkbFile *) file->common.next) {
if (file->file_type < FIRST_KEYMAP_FILE_TYPE || if (file->file_type < FIRST_KEYMAP_FILE_TYPE ||
file->file_type > LAST_KEYMAP_FILE_TYPE) { file->file_type > LAST_KEYMAP_FILE_TYPE) {
log_err(ctx, "Cannot define %s in a keymap file\n", if (file->file_type == FILE_TYPE_GEOMETRY) {
xkb_file_type_to_string(file->file_type)); 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; continue;
} }

View File

@ -273,14 +273,7 @@ XkbMapConfig : OptFlags FileType OptMapName OBRACE
DeclList DeclList
CBRACE SEMI CBRACE SEMI
{ {
if ($2 == FILE_TYPE_GEOMETRY) { $$ = XkbFileCreate($2, $3, $5, $1);
free($3);
FreeStmt($5);
$$ = NULL;
}
else {
$$ = XkbFileCreate($2, $3, $5, $1);
}
} }
; ;