diff --git a/Meta/Lagom/Fuzzers/FuzzTar.cpp b/Meta/Lagom/Fuzzers/FuzzTar.cpp index 7637dbd36d..1786305da4 100644 --- a/Meta/Lagom/Fuzzers/FuzzTar.cpp +++ b/Meta/Lagom/Fuzzers/FuzzTar.cpp @@ -25,9 +25,6 @@ extern "C" int LLVMFuzzerTestOneInput(uint8_t const* data, size_t size) auto tar_stream = tar_stream_or_error.release_value(); - if (!tar_stream->valid()) - return 0; - while (!tar_stream->finished()) { auto const& header = tar_stream->header(); diff --git a/Userland/Libraries/LibArchive/TarStream.cpp b/Userland/Libraries/LibArchive/TarStream.cpp index adb489d7d1..2d917682c4 100644 --- a/Userland/Libraries/LibArchive/TarStream.cpp +++ b/Userland/Libraries/LibArchive/TarStream.cpp @@ -56,13 +56,7 @@ ErrorOr> TarInputStream::construct(NonnullOwnPtrm_stream->read(Bytes(&tar_stream->m_header, sizeof(m_header)))); - if (header_span.size() != sizeof(m_header)) - return Error::from_string_literal("Failed to read the entire header"); - - // Discard the rest of the block. - TRY(tar_stream->m_stream->discard(block_size - sizeof(TarFileHeader))); + TRY(tar_stream->load_next_header()); return tar_stream; } @@ -89,7 +83,13 @@ ErrorOr TarInputStream::advance() TRY(m_stream->discard(block_ceiling(file_size) - m_file_offset)); m_file_offset = 0; - // FIXME: This is not unlike the initial initialization. Maybe we should merge those two. + TRY(load_next_header()); + + return {}; +} + +ErrorOr TarInputStream::load_next_header() +{ auto header_span = TRY(m_stream->read(Bytes(&m_header, sizeof(m_header)))); if (header_span.size() != sizeof(m_header)) return Error::from_string_literal("Failed to read the entire header"); diff --git a/Userland/Libraries/LibArchive/TarStream.h b/Userland/Libraries/LibArchive/TarStream.h index 25c8359a81..ac19015799 100644 --- a/Userland/Libraries/LibArchive/TarStream.h +++ b/Userland/Libraries/LibArchive/TarStream.h @@ -45,6 +45,7 @@ public: private: TarInputStream(NonnullOwnPtr); + ErrorOr load_next_header(); TarFileHeader m_header; NonnullOwnPtr m_stream; diff --git a/Userland/Utilities/tar.cpp b/Userland/Utilities/tar.cpp index 20be73318b..c6be7afc40 100644 --- a/Userland/Utilities/tar.cpp +++ b/Userland/Utilities/tar.cpp @@ -88,11 +88,6 @@ ErrorOr serenity_main(Main::Arguments arguments) }()); auto tar_stream = TRY(Archive::TarInputStream::construct(move(input_stream))); - // FIXME: implement ErrorOr? - if (!tar_stream->valid()) { - warnln("the provided file is not a well-formatted ustar file"); - return 1; - } HashMap global_overrides; HashMap local_overrides;