basic/journal-importer: reject any field names that journald would reject
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 20 May 2018 20:45:22 +0000 (22:45 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Thu, 31 May 2018 12:30:23 +0000 (14:30 +0200)
$ build-asan/fuzz-journal-remote test/fuzz-regressions/fuzz-journal-remote/crash-96dee870ea66d03e89ac321eee28ea63a9b9aa45
...
Ignoring invalid field: "S\020"
Ignoring invalid field: "S\020"
...

If the field name includes nul bytes, we won't print all of the name.
But that seems enough of a corner case to ignore.

src/basic/journal-importer.c

index 1d5f84a..86aa834 100644 (file)
@@ -14,6 +14,7 @@
 #include "io-util.h"
 #include "journal-file.h"
 #include "journal-importer.h"
+#include "journal-util.h"
 #include "parse-util.h"
 #include "string-util.h"
 #include "unaligned.h"
@@ -347,6 +348,16 @@ int journal_importer_process_data(JournalImporter *imp) {
                         /* chomp newline */
                         n--;
 
+                        if (!journal_field_valid(line, sep - line, true)) {
+                                char buf[64], *t;
+
+                                t = strndupa(line, sep - line);
+                                log_debug("Ignoring invalid field: \"%s\"",
+                                          cellescape(buf, t));
+
+                                return 0;
+                        }
+
                         r = iovw_put(&imp->iovw, line, n);
                         if (r < 0)
                                 return r;