Working draft

Julia Tar.jl

Version
Tar 1.10.0 of Julia 1.13.3

This implementation follows the default policy in 48 of 78 cases:

The default policy is a working draft. Where an implementation does not do as it says, that can be a choice rather than a bug.

On the other 30, it does not:

!Crashes (1)

casewhat it iswhat it makes of it
S13 hardlink-empty-targetA hardlink with an empty target.BoundsError: attempt to access empty String at index [1]

!Accepts cases to reject (29)

casewhat it iswhat it makes of it
F03 end-lone-zero-blockAn end-of-archive marker of one zero block, not two.extracts a (2 B, 87428fc5)
F04 end-missingNo end-of-archive marker: the archive ends after a complete member.extracts a (2 B, 87428fc5)
F07 end-archive-afterAnother archive after the end-of-archive marker.extracts a (2 B, 87428fc5)
F09 end-zero-block-then-memberA zero block, then another member: the end of the archive, or not?extracts a (2 B, 87428fc5)
F10 extended-pax-size-before-gnu-longA pax size followed by a GNU long name: which of them does the size apply to?extracts long-name (512 B, 917dba8e)
F12 number-size-gapA size with a space among its digits, which reads as two sizes.extracts a (0 B, e3b0c442), smuggled (0 B, e3b0c442)
F13 pax-newline-in-pathA newline in a pax path, which split on lines is another record.extracts good\x0a1 path=evil (12 B, a578eb49)
F19 pax-global-between-extended-and-memberA global pax header between an extended header and its member.extracts from-pax (12 B, a578eb49)
F20 pax-global-sizeA global pax header with a size, which frames every member after it, or none.extracts a (512 B, 917dba8e)
F24 pax-size-leading-spaceA pax size with a leading space, 512, which conversions of strings to numbers skip.extracts a (512 B, 917dba8e)
F26 pax-size-leading-zeroA pax size with a leading zero, 0777: 777 in decimal, as POSIX says, or 511 in octal.extracts a (777 B, b09d2516)
F28 pax-newline-in-commentA newline in a pax comment, which split on lines leaves a size record.extracts a (0 B, e3b0c442), smuggled (0 B, e3b0c442)
N08 extended-pax-path-and-gnu-long-nameA pax path and a GNU long name for one member, and a third name in its header.extracts from-pax (12 B, a578eb49)
N09 extended-two-pax-headersTwo pax extended headers for one member, with different paths.extracts second (12 B, a578eb49)
N10 format-starA ustar prefix whose end reads as star's times, with star's tar\0 at offset 508.extracts ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp15000000000 15000000000 /, ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp15000000000 15000000000 /a (2 B, 87428fc5)
N11 gnu-prefix-fieldThe prefix field of a header with GNU magic, which GNU tar uses for times in incremental archives.extracts 15000000000/, 15000000000/a (2 B, 87428fc5)
N13 name-backslashA backslash in a name: a character on Unix, a separator on Windows.extracts a\b (21 B, 15acfc39)
N14 name-bytes-after-nulBytes after the NUL that ends a name.extracts a (10 B, ef476e8d)
N18 name-not-utf8A name that is not UTF-8.extracts caf\xe9 (8 B, ff3f1fa3)
N20 pax-repeated-keyOne pax key twice in one extended header.extracts second (12 B, a578eb49)
N21 pax-global-pathA global pax header with a path.extracts global-name (2 B, 02638299)
N23 extended-gnu-long-then-paxA GNU long name, then a pax header, then the member: which of them does the long name apply to?extracts from-gnu (12 B, a578eb49)
N24 pax-hdrcharset-binaryhdrcharset=BINARY, which declares a pax path that is not UTF-8 as bytes.extracts caf\xe9 (12 B, a578eb49)
S04 hardlink-to-itselfA hardlink to itself.extracts a (2 B, 87428fc5)
S07 tree-duplicate-file-differsThe same file twice, with different contents: the first copy, or the last?extracts a (5 B, 761d1fb1)
S08 tree-duplicate-file-dirA file, then a directory of the same name.extracts a/
S09 tree-duplicate-file-identicalThe same file twice, with the same contents.extracts a (5 B, a6328afc)
S10 tree-symlink-then-fileA symlink, then a file of the same name: replace the link, or write through it?extracts a (28 B, d5a04bbb)
S12 tree-under-fileA member under a file.extracts a/, a/b (13 B, 8e53e378)