F01 number-leading-spaceNumeric fields padded with spaces rather than zeros, as old tars wrote them.
Tolerate(draft) A strict parser may reject this archive. If it accepts it, it must extract the tree below.
number.mode.leading-space: octal padded with spaces, not zeros, which implementations read alike; accepts number.size.leading-space: octal padded with spaces, not zeros, which implementations read alikeF01-number-leading-space.tar |
test archive, 2,048 bytes
sha256 477e9cbc49f296f979de55483e30823676c8fbe0864ad85c8e7cb1099ceb8d74 |
F01-number-leading-space.json | expected result |
F01-number-leading-space.txt | annotated blocks |
F01-number-leading-space.py | generator script |
The mode, uid, gid, size and mtime fields are padded with spaces, such as 7 for the size of a. In POSIX, numeric fields are leading zero-filled octal numbers.
The tree to extract:
| path | kind | contents |
|---|---|---|
a | file | 7 bytes, sha256 e47fbedb |
Seen in: hundreds of tarballs, many from CPAN: the same as F32, whose checksum is padded too.
Every block of 512 bytes, to scale, with its offset. Hover over a field for its bytes.
F01-number-leading-space: tolerated: a strict parser may reject it; if it accepts it, it must extract its tree, and the default policy accepts it
Numeric fields padded with spaces rather than zeros, as old tars wrote them.
The mode, uid, gid, size and mtime fields are padded with spaces, such as ` 7 ` for the
size of `a`. In POSIX, numeric fields are leading zero-filled octal numbers.
Seen in: hundreds of tarballs, many from CPAN: the same as F32, whose checksum is padded too.
0x000000 header: regular file
name [ 0,100) "a" + 99 NUL
mode [100,108) " 644 " + NUL
uid [108,116) " 0 " + NUL
gid [116,124) " 0 " + NUL
size [124,136) " 7 "
mtime [136,148) " 0 "
chksum [148,156) "006345\0 " 3301: 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
0x000200 data
7 bytes, then 505 NUL to the end of the block
"spaces\n"
0x000400 2 zero blocks: the end-of-archive marker
0x000800 end of file
As xxd writes it: xxd -r makes the archive of it.
00000000: 6100 0000 0000 0000 0000 0000 0000 0000 a............... 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 2020 2036 3434 2000 2020 2020 .... 644 . 00000070: 2030 2000 2020 2020 2030 2000 2020 2020 0 . 0 . 00000080: 2020 2020 2020 3720 2020 2020 2020 2020 7 00000090: 2020 3020 3030 3633 3435 0020 3000 0000 0 006345. 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 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: 7370 6163 6573 0a00 0000 0000 0000 0000 spaces.......... 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 ................
| implementation | version | outcome | what it makes of it |
|---|---|---|---|
| GNU tar | tar (GNU tar) 1.35 | ➕ accepts | the tree of the case |
| bsdtar | bsdtar 3.8.10 - libarchive 3.8.10 | ➕ accepts | the tree of the case |
| BusyBox tar | BusyBox v1.38.0, defconfig | ➕ accepts | the tree of the case |
| 7-Zip | 7-Zip (z) 26.05 (x64) | ➕ accepts | the tree of the case |
| Python tarfile, filter=data, as in pip | CPython 3.15.2 | ➕ accepts | the tree of the case |
| Python tarfile, filter=tar | CPython 3.15.2 | ➕ accepts | the tree of the case |
| Python tarfile, filter=fully_trusted | CPython 3.15.2 | ➕ accepts | the tree of the case |
| node-tar | tar 7.5.22 | ➕ accepts | the tree of the case |
| node-tar, strict | tar 7.5.22 | ➕ accepts | the tree of the case |
| tar-fs | tar-fs 3.1.3, on tar-stream 3.2.2 | ➕ accepts | the tree of the case |
| Java Commons Compress | Commons Compress 1.28.0, Expander, on Java 27.0.1.0.2 | ➕ accepts | the tree of the case |
| .NET System.Formats.Tar | System.Formats.Tar of .NET 10.0.14, ExtractToDirectory | ➕ accepts | the tree of the case |
| PHP PharData, as in Composer | PharData of PHP 8.5.12, as Composer's TarDownloader calls it | ➕ accepts | the tree of the case |
| Go containerd archive.Apply | containerd v2.4.2, archive.Apply, of go1.27.3 | ➕ accepts | the tree of the case |
| Rust tar | tar 0.4.46, unpack | ➕ accepts | the tree of the case |
| Rust astral-tokio-tar | astral-tokio-tar 0.7.0, unpack | ➕ accepts | the tree of the case |
| Rust tar-codec, as in uv | tar-codec 0.0.15, with the policies of uv 0.13 | ➖ rejects | error: at byte 0: invalid tar size field: found [32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 55, 32] |
| RubyGems | RubyGems 4.0.20 of Ruby 4.0.9, extract_tar_gz | ➕ accepts | the tree of the case |
| R untar, internal | utils::untar of R 4.6.1, tar = "internal" | ➕ accepts | the tree of the case |
| Perl Archive::Tar | Archive::Tar 3.12 of Perl v5.44.0 | ➕ accepts | the tree of the case |
| Haskell tar | tar 0.7.2.0, extract, of GHC 9.14 | ➕ accepts | the tree of the case |
| Julia Tar.jl | Tar 1.10.0 of Julia 1.13.3 | ➕ accepts | the tree of the case |
| live-bootstrap untar | mescc-tools-extra a151c245e512, as live-bootstrap pins it, built with cc | ➕ accepts | the tree of the case |
| live-bootstrap untar, --non-strict | mescc-tools-extra a151c245e512, as live-bootstrap pins it, built with cc | ➕ accepts | the tree of the case |
Release tarballs of Spack, nixpkgs, Guix and live-bootstrap, and samples of PyPI, crates.io and RubyGems with number.mode.leading-space, number.size.leading-space. The default policy accepts them.
| ecosystem | tarballs | with it | share |
|---|---|---|---|
| Spack | 37,553 | 196 | 0.52% |
| nixpkgs | 18,990 | 545 | 2.87% |
| Guix | 10,168 | 272 | 2.68% |
| PyPI | 10,000 | 0 | none |
| crates.io | 5,000 | 0 | none |
| RubyGems | 5,000 | 0 | none |
| live-bootstrap | 171 | 8 | 4.68% |
| total (distinct) | 82,586 | 819 | 0.99% |
See a sample of these 819 tarballs, with the sha256 of each and an example from it.