From 26ba195cf642cc6dba9b2ca724620e7b6c98b21f Mon Sep 17 00:00:00 2001 From: Tim Schumacher Date: Wed, 1 Mar 2023 15:51:13 +0100 Subject: [PATCH] LibArchive: Read Tar archive headers through `read_value` --- Userland/Libraries/LibArchive/Tar.h | 5 +++++ Userland/Libraries/LibArchive/TarStream.cpp | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibArchive/Tar.h b/Userland/Libraries/LibArchive/Tar.h index 8cb1c18c14..86ad43059f 100644 --- a/Userland/Libraries/LibArchive/Tar.h +++ b/Userland/Libraries/LibArchive/Tar.h @@ -155,3 +155,8 @@ private: }; } + +template<> +struct AK::Traits : public AK::GenericTraits { + static constexpr bool is_trivially_serializable() { return true; } +}; diff --git a/Userland/Libraries/LibArchive/TarStream.cpp b/Userland/Libraries/LibArchive/TarStream.cpp index f876dd1cab..dc4cf8ef26 100644 --- a/Userland/Libraries/LibArchive/TarStream.cpp +++ b/Userland/Libraries/LibArchive/TarStream.cpp @@ -92,10 +92,7 @@ ErrorOr TarInputStream::load_next_header() { size_t number_of_consecutive_zero_blocks = 0; while (true) { - // FIXME: This should read the entire span. - auto header_span = TRY(m_stream->read_some(Bytes(&m_header, sizeof(m_header)))); - if (header_span.size() != sizeof(m_header)) - return Error::from_string_literal("Failed to read the entire header"); + m_header = TRY(m_stream->read_value()); // Discard the rest of the header block. TRY(m_stream->discard(block_size - sizeof(TarFileHeader)));