This implementation follows the default policy in 27 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 51, it does not:
| case | what it is | what it makes of it |
|---|---|---|
N12 name-absolute | An absolute name, which points outside the directory the archive is extracted to. | writes outside: /tmp/tar-minefield-absolute (89 B, 3b7f22a5) |
N16 name-dotdot | A name with .., which climbs out of the directory the archive is extracted to. | writes outside: x/y/tar-minefield-escaped (85 B, fc503701) |
S11 tree-through-symlink | A member written through a symlink, which points out of the destination. | writes outside: x/y/tar-minefield-through-symlink (89 B, 3b7f22a5) |
| case | what it is | what it makes of it |
|---|---|---|
F03 end-lone-zero-block | An end-of-archive marker of one zero block, not two. | extracts a (2 B, 87428fc5) |
F06 checksum-signed | A checksum that only matches as the signed sum of the header. | extracts a (2 B, 87428fc5) |
F07 end-archive-after | Another archive after the end-of-archive marker. | extracts a (2 B, 87428fc5) |
F09 end-zero-block-then-member | A zero block, then another member: the end of the archive, or not? | extracts a (2 B, 87428fc5) |
F11 magic-odd-version | The POSIX magic with a version that is neither 00 nor NULs. | extracts a (2 B, 87428fc5) |
F12 number-size-gap | A 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-path | A newline in a pax path, which split on lines is another record. | extracts PaxHeader (25 B, 19000a4f), plain (12 B, a578eb49) |
F15 pax-size-on-dir | A pax size on a directory, which takes the next header for its data. | extracts PaxHeader (12 B, 609af461), dir/, dir/smuggled (0 B, e3b0c442) |
F16 type-unknown | An unknown typeflag with a size: data, or no data? | extracts unknown (512 B, 917dba8e) |
F19 pax-global-between-extended-and-member | A global pax header between an extended header and its member. | extracts PaxHeader (17 B, 45b5e3aa), header-name (12 B, a578eb49), pax_global_header (19 B, d0b8d0ef) |
F20 pax-global-size | A global pax header with a size, which frames every member after it, or none. | extracts a (0 B, e3b0c442), pax_global_header (12 B, 609af461), smuggled (0 B, e3b0c442) |
F21 pax-size-empty | An empty pax size, which in POSIX removes the size rather than giving one. | extracts PaxHeader (8 B, facaf1d1), a (512 B, 917dba8e) |
F22 pax-size-negative | A negative pax size, which a member cannot have. | extracts PaxHeader (13 B, db55a159), a (0 B, e3b0c442), smuggled (0 B, e3b0c442) |
F23 pax-size-plus | A pax size with a plus sign, +512, which conversions of strings to numbers accept. | extracts PaxHeader (13 B, 7cc19464), a (0 B, e3b0c442), smuggled (0 B, e3b0c442) |
F24 pax-size-leading-space | A pax size with a leading space, 512, which conversions of strings to numbers skip. | extracts PaxHeader (13 B, 62deb37f), a (0 B, e3b0c442), smuggled (0 B, e3b0c442) |
F25 pax-size-not-ascii-digits | A pax size in Arabic-Indic digits, ٥١٢, which some conversions of strings read as 512. | extracts PaxHeader (15 B, 33c621af), a (0 B, e3b0c442), smuggled (0 B, e3b0c442) |
F26 pax-size-leading-zero | A pax size with a leading zero, 0777: 777 in decimal, as POSIX says, or 511 in octal. | extracts PaxHeader (13 B, fa5ee474), a (0 B, e3b0c442), smuggled-1 (0 B, e3b0c442), smuggled-2 (0 B, e3b0c442) |
F27 pax-size-too-large | A pax size of 2^64 + 512, which wraps around to 512 in 64 bits. | extracts PaxHeader (29 B, 45e3bb26), a (0 B, e3b0c442), smuggled (0 B, e3b0c442) |
F28 pax-newline-in-comment | A newline in a pax comment, which split on lines leaves a size record. | extracts PaxHeader (25 B, 99e4ec94), a (0 B, e3b0c442), smuggled (0 B, e3b0c442) |
F33 size-on-dir | A size in the header of a directory, which takes the next header for its data. | extracts dir/, dir/smuggled (0 B, e3b0c442) |
F36 pax-record-length-short | A pax record whose length is one byte short, so that it ends just before its newline. | extracts PaxHeader (17 B, 51e09037), from-header (12 B, a578eb49) |
N09 extended-two-pax-headers | Two pax extended headers for one member, with different paths. | extracts PaxHeader (15 B, 7c8761f1), header-name (12 B, a578eb49) |
N10 format-star | A ustar prefix whose end reads as star's times, with star's tar\0 at offset 508. | extracts a (2 B, 87428fc5) |
N11 gnu-prefix-field | The prefix field of a header with GNU magic, which GNU tar uses for times in incremental archives. | extracts a (2 B, 87428fc5) |
N13 name-backslash | A backslash in a name: a character on Unix, a separator on Windows. | extracts a\b (21 B, 15acfc39) |
N14 name-bytes-after-nul | Bytes after the NUL that ends a name. | extracts a (10 B, ef476e8d) |
N17 name-empty | A member with an empty name. | extracts nothing |
N19 pax-nul-in-path | A NUL inside a pax path. | extracts PaxHeader (12 B, 6f855603), header-name (12 B, 627be4bf) |
N20 pax-repeated-key | One pax key twice in one extended header. | extracts PaxHeader (29 B, 14422e4d), header-name (12 B, a578eb49) |
N21 pax-global-path | A global pax header with a path. | extracts a (2 B, 87428fc5), b (2 B, 02638299), pax_global_header (20 B, d5acb589) |
N22 pax-path-empty | An empty pax path, which in POSIX removes the path rather than giving one. | extracts PaxHeader (8 B, b6553e3e), from-header (12 B, a578eb49) |
N24 pax-hdrcharset-binary | hdrcharset=BINARY, which declares a pax path that is not UTF-8 as bytes. | extracts PaxHeader (34 B, dfe2f7e0), cafe (12 B, a578eb49) |
N26 pax-global-path-then-empty | A global path, then a global header that removes it with an empty value. | extracts a (12 B, a578eb49), pax_global_header (8 B, b6553e3e) |
K01 kind-trailing-slash-file | A regular file whose name ends in a slash: a file, or a directory? | extracts a/ |
K02 linkname-on-file | A regular file with a link target. | extracts a (19 B, bc345849) |
S07 tree-duplicate-file-differs | The same file twice, with different contents: the first copy, or the last? | extracts a (5 B, 761d1fb1) |
S08 tree-duplicate-file-dir | A file, then a directory of the same name. | extracts a (13 B, 294e546a) |
S09 tree-duplicate-file-identical | The same file twice, with the same contents. | extracts a (5 B, a6328afc) |
S10 tree-symlink-then-file | A symlink, then a file of the same name: replace the link, or write through it? | extracts a → target, target (28 B, d5a04bbb) |
S12 tree-under-file | A member under a file. | extracts a (7 B, da69f286) |
| case | what it is | what it makes of it |
|---|---|---|
F17 pax-global-comment | The global pax header with only a comment, as git archive writes it. | extracts pax_global_header (52 B, e00a4a95), project/, project/README (6 B, 5891b5b5) |
F31 pax-xattr-not-utf8 | An xattr in a pax header whose value is not UTF-8, as libarchive and star write them. | extracts PaxHeader (29 B, e2035909), a (2 B, 87428fc5) |
N01 gnu-long-name | A name over 100 bytes, in a GNU long name. | error: unable to create long symlink |
N02 name-fills-field | A name of exactly 100 bytes, which fills the name field without a NUL. | extracts nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn0000644 (5 B, 0e716a5f) |
N03 pax-long-name | A name over 100 bytes, in a pax path. | extracts PaxHeader (131 B, 8cc43c67), dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd/, dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd/fffffffffffffffffffffffffffffffffffffff0000644 (5 B, bbdbb75b) |
N04 ustar-prefix | A long name split between the ustar prefix and name fields. | extracts file (9 B, 7dd9c6f9) |
F14 pax-size-disagrees | A pax size that disagrees with the header's, so that a reader of the header's misses a member. | extracts PaxHeader (9 B, 33638443), a (512 B, 917dba8e) |
F18 pax-global-comment-after-members | A global pax header with only a comment, after the first member. | extracts a (2 B, 87428fc5), b (2 B, 02638299), pax_global_header (19 B, 89c2f7ac) |