summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRan Benita <ran234@gmail.com>2018-03-11 17:07:06 +0200
committerRan Benita <ran234@gmail.com>2018-07-30 10:35:10 +0300
commit917636b1d0d70205a13f89062b95e3a0fc31d4ff (patch)
treea2e321a858fa07a21da77fc99a33ea037cb4ba6d /src
parente3cacae7b1bfda0d839c280494f23284a1187adf (diff)
downloadxorg-lib-libxkbcommon-917636b1d0d70205a13f89062b95e3a0fc31d4ff.tar.gz
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>
Diffstat (limited to 'src')
-rw-r--r--src/xkbcomp/keymap.c9
-rw-r--r--src/xkbcomp/parser.y9
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 d15d24b..b555bc2 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);
}
;