From 2dd17e3882bf7d411f8f423825edeb6c45e4a4b0 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Sat, 13 Feb 2021 07:05:53 +0000 Subject: [PATCH] Be explicit about zip64 extra field sizes. Formatting --- .../Headers/LocalEntryHeaderExtraFactory.cs | 35 ++++++++++++++----- .../GZip/GZipReaderTests.cs | 4 +-- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/SharpCompress/Common/Zip/Headers/LocalEntryHeaderExtraFactory.cs b/src/SharpCompress/Common/Zip/Headers/LocalEntryHeaderExtraFactory.cs index 2e20e80f..31282db4 100644 --- a/src/SharpCompress/Common/Zip/Headers/LocalEntryHeaderExtraFactory.cs +++ b/src/SharpCompress/Common/Zip/Headers/LocalEntryHeaderExtraFactory.cs @@ -72,16 +72,35 @@ namespace SharpCompress.Common.Zip.Headers private void Process() { if (DataBytes.Length >= 8) + { UncompressedSize = BinaryPrimitives.ReadInt64LittleEndian(DataBytes); - if (DataBytes.Length >= 16) - CompressedSize = BinaryPrimitives.ReadInt64LittleEndian(DataBytes.AsSpan(8)); - if (DataBytes.Length >= 24) - RelativeOffsetOfEntryHeader = BinaryPrimitives.ReadInt64LittleEndian(DataBytes.AsSpan(16)); - if (DataBytes.Length >= 28) - VolumeNumber = BinaryPrimitives.ReadUInt32LittleEndian(DataBytes.AsSpan(24)); + } - if (DataBytes.Length > 28) - throw new ArchiveException("Unexpected size of of Zip64 extended information extra field"); + if (DataBytes.Length >= 16) + { + CompressedSize = BinaryPrimitives.ReadInt64LittleEndian(DataBytes.AsSpan(8)); + } + + if (DataBytes.Length >= 24) + { + RelativeOffsetOfEntryHeader = BinaryPrimitives.ReadInt64LittleEndian(DataBytes.AsSpan(16)); + } + + if (DataBytes.Length >= 28) + { + VolumeNumber = BinaryPrimitives.ReadUInt32LittleEndian(DataBytes.AsSpan(24)); + } + + switch (DataBytes.Length) + { + case 8: + case 16: + case 24: + case 28: + break; + default: + throw new ArchiveException($"Unexpected size of of Zip64 extended information extra field: {DataBytes.Length}"); + } } public long UncompressedSize { get; private set; } diff --git a/tests/SharpCompress.Test/GZip/GZipReaderTests.cs b/tests/SharpCompress.Test/GZip/GZipReaderTests.cs index bab72e97..ed308c98 100644 --- a/tests/SharpCompress.Test/GZip/GZipReaderTests.cs +++ b/tests/SharpCompress.Test/GZip/GZipReaderTests.cs @@ -17,8 +17,8 @@ namespace SharpCompress.Test.GZip { Read("Tar.tar.gz", CompressionType.GZip); } - - + + [Fact] public void GZip_Reader_Generic2() {