From a00075ee0d3a712c4aa4cdb44c7a4f19eb7f8b6a Mon Sep 17 00:00:00 2001 From: Lars Vahlenberg Date: Fri, 17 Jun 2022 15:07:07 +0200 Subject: [PATCH] Wrong flags set, we do not expose this in the interface --- .../Writers/Zip/ZipCentralDirectoryEntry.cs | 24 +++++++++++++++---- .../SharpCompress.Test/Zip/ZipWriterTests.cs | 21 ---------------- 2 files changed, 19 insertions(+), 26 deletions(-) diff --git a/src/SharpCompress/Writers/Zip/ZipCentralDirectoryEntry.cs b/src/SharpCompress/Writers/Zip/ZipCentralDirectoryEntry.cs index 8fe87d1e..d4609ef6 100644 --- a/src/SharpCompress/Writers/Zip/ZipCentralDirectoryEntry.cs +++ b/src/SharpCompress/Writers/Zip/ZipCentralDirectoryEntry.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Buffers.Binary; using System.IO; using System.Text; @@ -98,10 +98,24 @@ namespace SharpCompress.Writers.Zip BinaryPrimitives.WriteUInt16LittleEndian(intBuf, 0); outputStream.Write(intBuf.Slice(0, 2)); // disk=0 - BinaryPrimitives.WriteUInt16LittleEndian(intBuf, (ushort)flags); - outputStream.Write(intBuf.Slice(0, 2)); // file type: binary - BinaryPrimitives.WriteUInt16LittleEndian(intBuf, (ushort)flags); - outputStream.Write(intBuf.Slice(0, 2)); // Internal file attributes + + // Internal file attributes: + // Bit 0: apparent ASCII/ text file + // Bit 1: reserved + // Bit 2: control field records precede logical records + // Bits 3 - 16: unused + BinaryPrimitives.WriteUInt16LittleEndian(intBuf, 0); + outputStream.Write(intBuf.Slice(0, 2)); // file type: binary, Internal file attributes + + // External flags are host-dependent, this might match DOS + // Bit 0: Read-Only + // Bit 1: Hidden + // Bit 2: System + // Bit 3: Label + // Bit 4: Directory + // Bit 5: Archive + BinaryPrimitives.WriteUInt16LittleEndian(intBuf, 0); + outputStream.Write(intBuf.Slice(0, 2)); // External file attributes BinaryPrimitives.WriteUInt16LittleEndian(intBuf, 0x8100); outputStream.Write(intBuf.Slice(0, 2)); diff --git a/tests/SharpCompress.Test/Zip/ZipWriterTests.cs b/tests/SharpCompress.Test/Zip/ZipWriterTests.cs index 6c997515..8d546cec 100644 --- a/tests/SharpCompress.Test/Zip/ZipWriterTests.cs +++ b/tests/SharpCompress.Test/Zip/ZipWriterTests.cs @@ -2,9 +2,6 @@ using System.Text; using SharpCompress.Common; using Xunit; -using System.IO; -using SharpCompress.Writers.Zip; -using SharpCompress.Compressors.Deflate; namespace SharpCompress.Test.Zip { @@ -52,23 +49,5 @@ namespace SharpCompress.Test.Zip { Assert.Throws(() => Write(CompressionType.Rar, "Zip.ppmd.noEmptyDirs.zip", "Zip.ppmd.noEmptyDirs.zip")); } - - [Fact] - public void Zip_Write_MemoryStream() - { - var ms = new MemoryStream(); - var zw = new ZipWriter(ms, new ZipWriterOptions(compressionType: CompressionType.Deflate ) { DeflateCompressionLevel = CompressionLevel.None } ); - var payload = new string('\n', 100000); - using (var stream = zw.WriteToStream("test.txt", new ZipWriterEntryOptions())) - using (var streamWriter = new StreamWriter(stream: stream)) - { - streamWriter.Write(payload); - } - - using( var file = new FileStream("d:\\projects\\test.zip", FileMode.Create, FileAccess.Write)) - { - ms.WriteTo(file); - } - } } }