From 1b661c9df197c2d63281a73418ba7cd8762da7e6 Mon Sep 17 00:00:00 2001 From: cyr Date: Fri, 27 Aug 2021 22:38:04 +0200 Subject: [PATCH] Fixed bug where large (int32+ file size) adds an additional 512 bytes of padding in tar files. --- src/SharpCompress/Writers/Tar/TarWriter.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/SharpCompress/Writers/Tar/TarWriter.cs b/src/SharpCompress/Writers/Tar/TarWriter.cs index 7f0f05e00..d78e86929 100644 --- a/src/SharpCompress/Writers/Tar/TarWriter.cs +++ b/src/SharpCompress/Writers/Tar/TarWriter.cs @@ -87,18 +87,15 @@ public void Write(string filename, Stream source, DateTime? modificationTime, lo header.Name = NormalizeFilename(filename); header.Size = realSize; header.Write(OutputStream); + size = source.TransferTo(OutputStream); - PadTo512(size.Value, false); + PadTo512(size.Value); } - private void PadTo512(long size, bool forceZeros) + private void PadTo512(long size) { - int zeros = (int)size % 512; - if (zeros == 0 && !forceZeros) - { - return; - } - zeros = 512 - zeros; + int zeros = unchecked((int)(((size + 511L) & ~511L) - size)); + OutputStream.Write(stackalloc byte[zeros]); } @@ -108,8 +105,7 @@ protected override void Dispose(bool isDisposing) { if (finalizeArchiveOnClose) { - PadTo512(0, true); - PadTo512(0, true); + OutputStream.Write(stackalloc byte[1024]); } switch (OutputStream) {