From: Lennart Poettering Date: Fri, 24 Jul 2015 00:00:43 +0000 (+0200) Subject: journal: when verifying journal files, handle empty ones nicely X-Git-Tag: v223~44^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8dc37a85255f68d62f7af66696cbf6a66401fb2a;p=thirdparty%2Fsystemd.git journal: when verifying journal files, handle empty ones nicely A journal file that carries no objects should be considered valid. --- diff --git a/src/journal/journal-verify.c b/src/journal/journal-verify.c index 7d68149cd46..637162e3053 100644 --- a/src/journal/journal-verify.c +++ b/src/journal/journal-verify.c @@ -885,7 +885,11 @@ int journal_file_verify( * superficial structure, headers, hashes. */ p = le64toh(f->header->header_size); - while (p != 0) { + for (;;) { + /* Early exit if there are no objects in the file, at all */ + if (le64toh(f->header->tail_object_offset) == 0) + break; + if (show_progress) draw_progress(scale_progress(0x7FFF, p, le64toh(f->header->tail_object_offset)), &last_usec); @@ -901,9 +905,6 @@ int journal_file_verify( goto fail; } - if (p == le64toh(f->header->tail_object_offset)) - found_last = true; - n_objects ++; r = journal_file_object_verify(f, p, o); @@ -1148,13 +1149,15 @@ int journal_file_verify( n_weird ++; } - if (p == le64toh(f->header->tail_object_offset)) - p = 0; - else - p = p + ALIGN64(le64toh(o->object.size)); - } + if (p == le64toh(f->header->tail_object_offset)) { + found_last = true; + break; + } - if (!found_last) { + p = p + ALIGN64(le64toh(o->object.size)); + }; + + if (!found_last && le64toh(f->header->tail_object_offset) != 0) { error(le64toh(f->header->tail_object_offset), "tail object pointer dead"); r = -EBADMSG; goto fail; @@ -1200,19 +1203,7 @@ int journal_file_verify( goto fail; } - if (n_data_hash_tables != 1) { - error(0, "missing data hash table"); - r = -EBADMSG; - goto fail; - } - - if (n_field_hash_tables != 1) { - error(0, "missing field hash table"); - r = -EBADMSG; - goto fail; - } - - if (!found_main_entry_array) { + if (!found_main_entry_array && le64toh(f->header->entry_array_offset) != 0) { error(0, "missing entry array"); r = -EBADMSG; goto fail;