TarWriter writes badly formatted size field for a zero sized regular file (original) (raw)

Description

TarWriter writes badly formatted size field for a zero sized regular file

Reproduction Steps

using System; using System.IO; using System.Linq; using System.Formats.Tar;

MemoryStream emptyData = new(0); MemoryStream output = new(); TarWriter archive = new(output, TarEntryFormat.Pax); PaxTarEntry te = new(TarEntryType.RegularFile, "zero_size") {DataStream = emptyData}; archive.WriteEntry(te); // get the size[12] field, after two unrelated blocks[512] and name[100], mode[8], uid[8], gid[8] var offset = 2512+100+38; var sizeBuffer=output.GetBuffer()[offset..(offset+12)]; // it's "00000000000\0" byte[] expected = new byte[] {0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0}; Console.WriteLine($"Proper size field: {sizeBuffer.SequenceEqual(expected)}");

Expected behavior

get all "0" in field (0x32) followed by "\0"

Actual behavior

get binary zero

Regression?

No

Known Workarounds

None

Configuration

Affected: (any with TarWriter)

Other information

No response