Working draft

N04 ustar-prefix

A long name split between the ustar prefix and name fields.

Accept(draft) Every implementation must accept this archive, and extract the tree below.

Category
name
Default policy
accepts it, as it allows ustar.prefix: the ustar prefix field
Files
N04-ustar-prefix.tar test archive, 2,048 bytes sha256 e418814aeb3130fbd4c6c73816bee00233468f77e0561c254ab224ca44618fef
N04-ustar-prefix.jsonexpected result
N04-ustar-prefix.txtannotated blocks
N04-ustar-prefix.pygenerator script

The case

The prefix field is 120 ps and the name field is file. In POSIX, the pathname is the prefix, followed by /, followed by the name, so file is in a directory whose name is the 120 ps.

The tree to extract:

pathkindcontents
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp/directory
pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp/filefile9 bytes, sha256 7dd9c6f9

Seen in: thousands of tarballs.

The archive

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

N04-ustar-prefix: every block of the archive0x000000header: regular filename [0,100): "file" + 96 NULnamemode [100,108): "0000644" + NUL, 644 (octal)uid [108,116): "0000000" + NUL, 0gid [116,124): "0000000" + NUL, 0size [124,136): "00000000011" + NUL, 9mtime [136,148): "00000000000" + NUL, 0chksum [148,156): "042237\0 ", 17567: 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): "pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp" + 35 NULprefixpad [500,512): 12 NULname "file" + 96 NULprefix "pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp" + 35 NUL0x000200data9 bytes, then 503 NUL to the end of the block; "prefixed\n""prefixed\n"0x0004002 zero blocks: the end-of-archive markerbytes 0 to 512 of 1024: 512 NUL0x0006002 zero blocks, continuedbytes 512 to 1024 of 1024: 512 NUL0x000800end of fileNULprintable ASCIIspacecontrol character, such as a newlinebyte over 0x7fwritten by the case itself
Every block, as text
N04-ustar-prefix: must accept, and extract its tree

A long name split between the ustar prefix and name fields.

The prefix field is 120 `p`s and the name field is `file`. In POSIX, the pathname is the prefix,
followed by `/`, followed by the name, so `file` is in a directory whose name is the 120 `p`s.

Seen in: thousands of tarballs.

0x000000  header: regular file
          name     [  0,100)  "file" + 96 NUL
          mode     [100,108)  "0000644" + NUL  644 (octal)
          uid      [108,116)  "0000000" + NUL  0
          gid      [116,124)  "0000000" + NUL  0
          size     [124,136)  "00000000011" + NUL  9
          mtime    [136,148)  "00000000000" + NUL  0
          chksum   [148,156)  "042237\0 "  17567: 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)  "pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppp" + 35 NUL
          pad      [500,512)  12 NUL
0x000200  data
          9 bytes, then 503 NUL to the end of the block
          "prefixed\n"
0x000400  2 zero blocks: the end-of-archive marker
0x000800  end of file
Every byte, as a hex dump

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

00000000: 6669 6c65 0000 0000 0000 0000 0000 0000  file............
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 3031 3100 3030 3030 3030 3030  0000011.00000000
00000090: 3030 3000 3034 3232 3337 0020 3000 0000  000.042237. 0...
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 0070 7070 7070 7070  .0000000.ppppppp
00000160: 7070 7070 7070 7070 7070 7070 7070 7070  pppppppppppppppp
00000170: 7070 7070 7070 7070 7070 7070 7070 7070  pppppppppppppppp
00000180: 7070 7070 7070 7070 7070 7070 7070 7070  pppppppppppppppp
00000190: 7070 7070 7070 7070 7070 7070 7070 7070  pppppppppppppppp
000001a0: 7070 7070 7070 7070 7070 7070 7070 7070  pppppppppppppppp
000001b0: 7070 7070 7070 7070 7070 7070 7070 7070  pppppppppppppppp
000001c0: 7070 7070 7070 7070 7070 7070 7070 7070  pppppppppppppppp
000001d0: 7000 0000 0000 0000 0000 0000 0000 0000  p...............
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000200: 7072 6566 6978 6564 0a00 0000 0000 0000  prefixed........
00000210: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000220: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000230: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000240: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000250: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000260: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000270: 0000 0000 0000 0000 0000 0000 0000 0000  ................
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: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000410: 0000 0000 0000 0000 0000 0000 0000 0000  ................
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 0000 0000 0000 0000 0000 0000  ................
00000470: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000480: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000490: 0000 0000 0000 0000 0000 0000 0000 0000  ................
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: 0000 0000 0000 0000 0000 0000 0000 0000  ................
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 0000 0000 0000 0000  ................
00000550: 0000 0000 0000 0000 0000 0000 0000 0000  ................
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: 0000 0000 0000 0000 0000 0000 0000 0000  ................
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  ................

What implementations make of it

implementationversionoutcomewhat it makes of it
GNU tartar (GNU tar) 1.35✅ as the verdict saysthe tree of the case
bsdtarbsdtar 3.8.10 - libarchive 3.8.10✅ as the verdict saysthe tree of the case
BusyBox tarBusyBox v1.38.0, defconfig✅ as the verdict saysthe tree of the case
7-Zip7-Zip (z) 26.05 (x64)✅ as the verdict saysthe tree of the case
Python tarfile, filter=data, as in pipCPython 3.15.2✅ as the verdict saysthe tree of the case
Python tarfile, filter=tarCPython 3.15.2✅ as the verdict saysthe tree of the case
Python tarfile, filter=fully_trustedCPython 3.15.2✅ as the verdict saysthe tree of the case
node-tartar 7.5.22✅ as the verdict saysthe tree of the case
node-tar, stricttar 7.5.22✅ as the verdict saysthe tree of the case
tar-fstar-fs 3.1.3, on tar-stream 3.2.2✅ as the verdict saysthe tree of the case
Java Commons CompressCommons Compress 1.28.0, Expander, on Java 27.0.1.0.2✅ as the verdict saysthe tree of the case
.NET System.Formats.TarSystem.Formats.Tar of .NET 10.0.14, ExtractToDirectory✅ as the verdict saysthe tree of the case
PHP PharData, as in ComposerPharData of PHP 8.5.12, as Composer's TarDownloader calls it✅ as the verdict saysthe tree of the case
Go containerd archive.Applycontainerd v2.4.2, archive.Apply, of go1.27.3✅ as the verdict saysthe tree of the case
Rust tartar 0.4.46, unpack✅ as the verdict saysthe tree of the case
Rust astral-tokio-tarastral-tokio-tar 0.7.0, unpack✅ as the verdict saysthe tree of the case
Rust tar-codec, as in uvtar-codec 0.0.15, with the policies of uv 0.13✅ as the verdict saysthe tree of the case
RubyGemsRubyGems 4.0.20 of Ruby 4.0.9, extract_tar_gz✅ as the verdict saysthe tree of the case
R untar, internalutils::untar of R 4.6.1, tar = "internal"✅ as the verdict saysthe tree of the case
Perl Archive::TarArchive::Tar 3.12 of Perl v5.44.0✅ as the verdict saysthe tree of the case
Haskell tartar 0.7.2.0, extract, of GHC 9.14✅ as the verdict saysthe tree of the case
Julia Tar.jlTar 1.10.0 of Julia 1.13.3✅ as the verdict saysthe tree of the case
live-bootstrap untarmescc-tools-extra a151c245e512, as live-bootstrap pins it, built with cc❌ another tree, or rejectstree A: file (9 B, 7dd9c6f9)
live-bootstrap untar, --non-strictmescc-tools-extra a151c245e512, as live-bootstrap pins it, built with cc❌ another tree, or rejectstree A: file (9 B, 7dd9c6f9)

Prevalence in release tarballs

Release tarballs of Spack, nixpkgs, Guix and live-bootstrap, and samples of PyPI, crates.io and RubyGems with ustar.prefix. The default policy accepts them.

ecosystemtarballswith itshare
Spack37,5535,45914.54%
nixpkgs18,9906213.27%
Guix10,1683393.33%
PyPI10,00080.08%
crates.io5,000100.20%
RubyGems5,000661.32%
live-bootstrap17131.75%
total (distinct)82,5866,3177.65%

See a sample of these 6,317 tarballs, with the sha256 of each and an example from it.