Working draft

N36 pax-gnu-sparse

A sparse file in GNU's pax format 1.0: the data as stored, or the file it expands to?

Reject(draft) A strict parser must reject this archive.

Category
name
Default policy
rejects it
Files
N36-pax-gnu-sparse.tar test archive, 3,584 bytes sha256 2e7a2e91a0f23bc5916a30a303ec1f5dfc1691a9b9e97ed1c1ea7491ad195111
N36-pax-gnu-sparse.jsonexpected result
N36-pax-gnu-sparse.txtannotated blocks
N36-pax-gnu-sparse.pygenerator script

The case

The archive has one member, whose pax header has GNU.sparse.major=1, GNU.sparse.minor=0, GNU.sparse.name=a, GNU.sparse.realsize=1026 and path=GNUSparseFile.0/a. Its data is a sparse map of one region, 2 bytes at offset 1024: the lines 1, 1024 and 2, followed by NULs up to the end of the block, followed by those 2 bytes, ab.

In POSIX, keywords such as GNU's are implementation extensions, which are not defined, so a reader that ignores them applies the pax path, and extracts GNUSparseFile.0/a, which contains the map and the data. As a GNU sparse file, the member is extracted as a file a that contains 1024 zero bytes, followed by ab. This case is ambiguous because the member is the data as stored, under its pax path, or the file it expands to, under GNU.sparse.name, or even the expanded file under the pax path.

Decision point: whether a sparse member is expanded, and which of its names it gets.

Seen in: none of the scanned tarballs.

The archive

Every block of 512 bytes, to scale, with its offset. Hover over a field for its bytes.

N36-pax-gnu-sparse: every block of the archive0x000000header: pax extended header, a sparse file in GNU's format 1.0name [0,100): "PaxHeader" + 91 NULnamemode [100,108): "0000644" + NUL, 644 (octal)uid [108,116): "0000000" + NUL, 0gid [116,124): "0000000" + NUL, 0size [124,136): "00000000167" + NUL, 119mtime [136,148): "00000000000" + NUL, 0chksum [148,156): "011105\0 ", 4677: the unsigned sum of the header, this field as spacestypeflag [156,157): "x", pax extended headerlinkname [157,257): 100 NULlinknamemagic [257,263): "ustar" + NULversion [263,265): "00"uname [265,297): 32 NULunamegname [297,329): 32 NULgnamedevmajor [329,337): "0000000" + NUL, 0devminor [337,345): "0000000" + NUL, 0prefix [345,500): 155 NULprefixpad [500,512): 12 NULname "PaxHeader" + 91 NUL0x000200data: pax records119 bytes of pax records, then 393 NUL; "22 GNU.sparse.major=1\n"; "22 GNU.sparse.minor=0\n"; "21 GNU.sparse.name=a\n"; "28 GNU.sparse.realsize=1026\n"; "26 path=GNUSparseFile.0/a\n""22 GNU.sparse.major=1\n""22 GNU.sparse.minor=0\n""21 GNU.sparse.name=a\n""28 GNU.sparse.realsize=1026\n""26 path=GNUSparseFile.0/a\n"0x000400header: regular file, the sparse map, then the one region of dataname [0,100): "GNUSparseFile.0/a" + 83 NULnamemode [100,108): "0000644" + NUL, 644 (octal)uid [108,116): "0000000" + NUL, 0gid [116,124): "0000000" + NUL, 0size [124,136): "00000001002" + NUL, 514mtime [136,148): "00000000000" + NUL, 0chksum [148,156): "012106\0 ", 5190: the unsigned sum of the header, this field as spacestypeflag [156,157): "0", regular filelinkname [157,257): 100 NULlinknamemagic [257,263): "ustar" + NULversion [263,265): "00"uname [265,297): 32 NULunamegname [297,329): 32 NULgnamedevmajor [329,337): "0000000" + NUL, 0devminor [337,345): "0000000" + NUL, 0prefix [345,500): 155 NULprefixpad [500,512): 12 NULname "GNUSparseFile.0/a" + 83 NUL0x000600databytes 0 to 512 of 1024: 514 bytes, then 510 NUL to the end of the block; "1\n1024\n2\n" + 391 NUL ..."1\n1024\n2\n" + 391 NUL ...0x000800data, continuedbytes 512 to 1024 of 1024: 514 bytes, then 510 NUL to the end of the block; "1\n1024\n2\n" + 391 NUL ...0x000a002 zero blocks: the end-of-archive markerbytes 0 to 512 of 1024: 512 NUL0x000c002 zero blocks, continuedbytes 512 to 1024 of 1024: 512 NUL0x000e00end of fileNULprintable ASCIIspacecontrol character, such as a newlinebyte over 0x7fwritten by the case itself
Every block, as text
N36-pax-gnu-sparse: must reject

A sparse file in GNU's pax format 1.0: the data as stored, or the file it expands to?

The archive has one member, whose pax header has `GNU.sparse.major=1`, `GNU.sparse.minor=0`,
`GNU.sparse.name=a`, `GNU.sparse.realsize=1026` and `path=GNUSparseFile.0/a`. Its data is a sparse
map of one region, 2 bytes at offset 1024: the lines `1`, `1024` and `2`, followed by NULs up to
the end of the block, followed by those 2 bytes, `ab`.

In POSIX, keywords such as GNU's are implementation extensions, which are not
defined, so a reader that ignores them applies the pax `path`, and extracts
`GNUSparseFile.0/a`, which contains the map and the data. As a GNU sparse file, the member is
extracted as a file `a` that contains 1024 zero bytes, followed by `ab`. This case is ambiguous
because the member is the data as stored, under its pax `path`, or the file it expands to, under
`GNU.sparse.name`, or even the expanded file under the pax `path`.

Decision point: whether a sparse member is expanded, and which of its names it gets.
Seen in: none of the scanned tarballs.
See also: F45, an old GNU sparse file.

0x000000  header: pax extended header, a sparse file in GNU's format 1.0
          name     [  0,100)  "PaxHeader" + 91 NUL
          mode     [100,108)  "0000644" + NUL  644 (octal)
          uid      [108,116)  "0000000" + NUL  0
          gid      [116,124)  "0000000" + NUL  0
          size     [124,136)  "00000000167" + NUL  119
          mtime    [136,148)  "00000000000" + NUL  0
          chksum   [148,156)  "011105\0 "  4677: the unsigned sum of the header, this field as spaces
          typeflag [156,157)  "x"  pax extended header
          linkname [157,257)  100 NUL
          magic    [257,263)  "ustar" + NUL
          version  [263,265)  "00"
          uname    [265,297)  32 NUL
          gname    [297,329)  32 NUL
          devmajor [329,337)  "0000000" + NUL  0
          devminor [337,345)  "0000000" + NUL  0
          prefix   [345,500)  155 NUL
          pad      [500,512)  12 NUL
0x000200  data: pax records
          119 bytes of pax records, then 393 NUL
          "22 GNU.sparse.major=1\n"
          "22 GNU.sparse.minor=0\n"
          "21 GNU.sparse.name=a\n"
          "28 GNU.sparse.realsize=1026\n"
          "26 path=GNUSparseFile.0/a\n"
0x000400  header: regular file, the sparse map, then the one region of data
          name     [  0,100)  "GNUSparseFile.0/a" + 83 NUL
          mode     [100,108)  "0000644" + NUL  644 (octal)
          uid      [108,116)  "0000000" + NUL  0
          gid      [116,124)  "0000000" + NUL  0
          size     [124,136)  "00000001002" + NUL  514
          mtime    [136,148)  "00000000000" + NUL  0
          chksum   [148,156)  "012106\0 "  5190: the unsigned sum of the header, this field as spaces
          typeflag [156,157)  "0"  regular file
          linkname [157,257)  100 NUL
          magic    [257,263)  "ustar" + NUL
          version  [263,265)  "00"
          uname    [265,297)  32 NUL
          gname    [297,329)  32 NUL
          devmajor [329,337)  "0000000" + NUL  0
          devminor [337,345)  "0000000" + NUL  0
          prefix   [345,500)  155 NUL
          pad      [500,512)  12 NUL
0x000600  data
          514 bytes, then 510 NUL to the end of the block
          "1\n1024\n2\n" + 391 NUL ...
0x000a00  2 zero blocks: the end-of-archive marker
0x000e00  end of file
Every byte, as a hex dump

As xxd writes it: xxd -r makes the archive of it.

00000000: 5061 7848 6561 6465 7200 0000 0000 0000  PaxHeader.......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 3030 3030 3634 3400 3030 3030  ....0000644.0000
00000070: 3030 3000 3030 3030 3030 3000 3030 3030  000.0000000.0000
00000080: 3030 3030 3136 3700 3030 3030 3030 3030  0000167.00000000
00000090: 3030 3000 3031 3131 3035 0020 7800 0000  000.011105. x...
000000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000000f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000100: 0075 7374 6172 0030 3000 0000 0000 0000  .ustar.00.......
00000110: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000120: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000130: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000140: 0000 0000 0000 0000 0030 3030 3030 3030  .........0000000
00000150: 0030 3030 3030 3030 0000 0000 0000 0000  .0000000........
00000160: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000170: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000180: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000190: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000200: 3232 2047 4e55 2e73 7061 7273 652e 6d61  22 GNU.sparse.ma
00000210: 6a6f 723d 310a 3232 2047 4e55 2e73 7061  jor=1.22 GNU.spa
00000220: 7273 652e 6d69 6e6f 723d 300a 3231 2047  rse.minor=0.21 G
00000230: 4e55 2e73 7061 7273 652e 6e61 6d65 3d61  NU.sparse.name=a
00000240: 0a32 3820 474e 552e 7370 6172 7365 2e72  .28 GNU.sparse.r
00000250: 6561 6c73 697a 653d 3130 3236 0a32 3620  ealsize=1026.26 
00000260: 7061 7468 3d47 4e55 5370 6172 7365 4669  path=GNUSparseFi
00000270: 6c65 2e30 2f61 0a00 0000 0000 0000 0000  le.0/a..........
00000280: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000290: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000002f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000300: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000310: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000320: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000330: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000340: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000350: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000360: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000370: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000380: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000390: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000003f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000400: 474e 5553 7061 7273 6546 696c 652e 302f  GNUSparseFile.0/
00000410: 6100 0000 0000 0000 0000 0000 0000 0000  a...............
00000420: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000430: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000440: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000450: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000460: 0000 0000 3030 3030 3634 3400 3030 3030  ....0000644.0000
00000470: 3030 3000 3030 3030 3030 3000 3030 3030  000.0000000.0000
00000480: 3030 3031 3030 3200 3030 3030 3030 3030  0001002.00000000
00000490: 3030 3000 3031 3231 3036 0020 3000 0000  000.012106. 0...
000004a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000004b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000004c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000004d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000004e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000004f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000500: 0075 7374 6172 0030 3000 0000 0000 0000  .ustar.00.......
00000510: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000520: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000530: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000540: 0000 0000 0000 0000 0030 3030 3030 3030  .........0000000
00000550: 0030 3030 3030 3030 0000 0000 0000 0000  .0000000........
00000560: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000570: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000580: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000590: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000005a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000005b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000005c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000005d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000005e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000005f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000600: 310a 3130 3234 0a32 0a00 0000 0000 0000  1.1024.2........
00000610: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000620: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000630: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000640: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000650: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000660: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000670: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000680: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000690: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000006a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000006b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000006c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000006d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000006e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000006f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000700: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000710: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000720: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000730: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000740: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000750: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000760: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000770: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000780: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000790: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000007a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000007b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000007c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000007d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000007e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000007f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000800: 6162 0000 0000 0000 0000 0000 0000 0000  ab..............
00000810: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000820: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000830: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000840: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000850: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000860: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000880: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000890: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000008a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000008b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000008c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000008d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000008e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000008f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000900: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000910: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000920: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000940: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000950: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000960: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000970: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000980: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000009a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000009b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000009c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000009d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000009e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000009f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000aa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000ac0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000ad0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000cd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000d90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000dc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000dd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

What implementations make of it

In the outcome column, ✅ means that the implementation follows the default policy.

implementationversionoutcomewhat it makes of it
GNU tartar (GNU tar) 1.35⚠️ acceptstree A: a (1026 B, f93a4465)
bsdtarbsdtar 3.8.11 - libarchive 3.8.11⚠️ acceptstree A: a (1026 B, f93a4465)
BusyBox tarBusyBox v1.38.0, defconfig⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
7-Zip7-Zip (z) 26.05 (x64)⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Python tarfile, filter=data, as in pipCPython 3.15.2⚠️ acceptstree C: GNUSparseFile.0/, GNUSparseFile.0/a (1026 B, f93a4465)
Python tarfile, filter=tarCPython 3.15.2⚠️ acceptstree C: GNUSparseFile.0/, GNUSparseFile.0/a (1026 B, f93a4465)
Python tarfile, filter=fully_trustedCPython 3.15.2⚠️ acceptstree C: GNUSparseFile.0/, GNUSparseFile.0/a (1026 B, f93a4465)
node-tartar 7.5.22⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
node-tar, stricttar 7.5.22⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
tar-fstar-fs 3.1.3, on tar-stream 3.2.2⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Java Commons CompressCommons Compress 1.28.0, Expander, on Java 27.0.1.0.2⚠️ acceptstree A: a (1026 B, f93a4465)
.NET System.Formats.TarSystem.Formats.Tar of .NET 10.0.14, ExtractToDirectory⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
PHP PharData, as in ComposerPharData of PHP 8.5.12, as Composer's TarDownloader calls it⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Go containerd archive.Applycontainerd v2.4.2, archive.Apply, of go1.27.3⚠️ acceptstree A: a (1026 B, f93a4465)
Rust tartar 0.4.46, unpack⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Rust astral-tokio-tarastral-tokio-tar 0.7.1, unpack⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Rust tar-codec, as in uvtar-codec 0.0.16, with the policies of uv 0.13✅ rejectserror: at byte 0: decode policy rejected input: pax vendor extension GNU.sparse.major is not allowed
RubyGemsRubyGems 4.0.20 of Ruby 4.0.9, extract_tar_gz⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
R untar, internalutils::untar of R 4.6.2, tar = "internal"⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Perl Archive::TarArchive::Tar 3.12 of Perl v5.44.0⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Haskell tartar 0.7.2.0, extract, of GHC 9.14⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
Julia Tar.jlTar 1.10.0 of Julia 1.13.3⚠️ acceptstree B: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f)
live-bootstrap untarmescc-tools-extra a151c245e512, as live-bootstrap pins it⚠️ acceptstree D: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f), PaxHeader (119 B, 4b963cc0)
live-bootstrap untar, --non-strictmescc-tools-extra a151c245e512, as live-bootstrap pins it⚠️ acceptstree D: GNUSparseFile.0/, GNUSparseFile.0/a (514 B, efc6219f), PaxHeader (119 B, 4b963cc0)

Prevalence in release tarballs

The table below shows how many release tarballs have the features of this test case.

ecosystemtarballswith itshare
Spack37,5530none
nixpkgs18,9900none
Guix10,1680none
PyPI10,0000none
crates.io5,0000none
RubyGems5,0000none
live-bootstrap1710none
total (distinct)82,5860none

See also