diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index ec06ea8e20..229a19d8e7 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -1842,8 +1842,11 @@ static int journal_file_append_data( assert(f); + /* Return a recognizable error for data that is submitted for *writing*. Note that we leave EBADMSG + * for bad messages we *read*. And EINVAL is too generic an error (which might be triggered by all + * kinds of other places). Hence use a separate EUCLEAN here. */ if (!data || size == 0) - return -EINVAL; + return -EUCLEAN; hash = journal_file_hash_data(f, data, size); @@ -1855,7 +1858,7 @@ static int journal_file_append_data( eq = memchr(data, '=', size); if (!eq) - return -EINVAL; + return -EUCLEAN; osize = journal_file_data_payload_offset(f) + size; r = journal_file_append_object(f, OBJECT_DATA, osize, &o, &p); @@ -4456,10 +4459,11 @@ int journal_file_copy_entry( return r; assert(r > 0); - if (l == 0) - return -EBADMSG; - r = journal_file_append_data(to, data, l, &u, &h); + if (r == -EUCLEAN) { + log_debug_errno(r, "Entry item %"PRIu64" invalid, skipping over it: %m", i); + continue; + } if (r < 0) return r;