Working draft

F56 number-size-base256

A size of 512 in base-256.

Tolerate(draft) A strict parser may reject this archive. If it accepts it, it must extract the expected tree below.

Category
framing
Default policy
accepts it: a reader that does not support base-256 cannot take it for octal, so it has one reading
Files
F56-number-size-base256.tar test archive, 2,048 bytes sha256 11b31d32aa7238f2467e85a2268f250f4fbf5b7012414994145f2d3e1000f820
F56-number-size-base256.jsonexpected result
F56-number-size-base256.txtannotated blocks
F56-number-size-base256.pygenerator script

The case

The archive has a file a of 512 bytes, whose size field is in base-256: the byte 0x80, followed by 512 as a binary number.

Sizes of 8 GiB and over do not fit in the 11 octal digits of the size field. In pax, they are written in a size record. In GNU's format, they are written in base-256. The first byte of the field, 0x80, tells it apart from octal. In POSIX, numeric fields are octal, so base-256 is an extension. This case is tolerated because it has one reading, here 512: a reader that does not support base-256 cannot take it for octal. It is a small instance of the base-256 sizes of large files, which no case can contain.

The expected tree:

pathkindcontents
afile512 bytes, sha256 a0b708e6

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.

F56-number-size-base256: every block of the archive0x000000header: regular file, size 512, in base-256name [0,100): "a" + 99 NULnamemode [100,108): "0000644" + NUL, 644 (octal)uid [108,116): "0000000" + NUL, 0gid [116,124): "0000000" + NUL, 0size [124,136): "\x80\0\0\0\0\0\0\0\0\0\x02\0", 512: base-256mtime [136,148): "00000000000" + NUL, 0chksum [148,156): "006520\0 ", 3408: 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 "a" + 99 NULsize "\x80\0\0\0\0\0\0\0\0\0\x02\0"0x000200data512 bytes; "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n" ..."a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\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
F56-number-size-base256: tolerated: a strict parser may reject it; if it accepts it, it must extract its tree, and the default policy accepts it

A size of 512 in base-256.

The archive has a file `a` of 512 bytes, whose size field is in base-256: the byte `0x80`, followed
by 512 as a binary number.

Sizes of 8 GiB and over do not fit in the 11 octal digits of the size field. In pax, they are
written in a `size` record. In GNU's format, they are written in base-256. The first byte of the
field, `0x80`, tells it apart from octal. In POSIX, numeric fields are octal, so
base-256 is an extension. This case is tolerated because it has one reading, here 512: a reader that
does not support base-256 cannot take it for octal. It is a small instance of the base-256 sizes of
large files, which no case can contain.

Seen in: none of the scanned tarballs.
See also: F29 and F30, a negative size and a size past 64 bits, in base-256.

0x000000  header: regular file, size 512, in base-256
          name     [  0,100)  "a" + 99 NUL
          mode     [100,108)  "0000644" + NUL  644 (octal)
          uid      [108,116)  "0000000" + NUL  0
          gid      [116,124)  "0000000" + NUL  0
          size     [124,136)  "\x80\0\0\0\0\0\0\0\0\0\x02\0"  512: base-256
          mtime    [136,148)  "00000000000" + NUL  0
          chksum   [148,156)  "006520\0 "  3408: 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
          512 bytes
          "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\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: 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 3030 3030 3634 3400 3030 3030  ....0000644.0000
00000070: 3030 3000 3030 3030 3030 3000 8000 0000  000.0000000.....
00000080: 0000 0000 0000 0200 3030 3030 3030 3030  ........00000000
00000090: 3030 3000 3030 3635 3230 0020 3000 0000  000.006520. 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: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000210: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000220: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000230: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000240: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000250: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000260: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000270: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000280: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000290: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000002a0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000002b0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000002c0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000002d0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000002e0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000002f0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000300: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000310: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000320: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000330: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000340: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000350: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000360: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000370: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000380: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
00000390: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000003a0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000003b0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000003c0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000003d0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000003e0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
000003f0: 610a 610a 610a 610a 610a 610a 610a 610a  a.a.a.a.a.a.a.a.
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

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

implementationversionoutcomewhat it makes of it
GNU tartar (GNU tar) 1.35➕ acceptsthe expected tree
bsdtarbsdtar 3.8.11 - libarchive 3.8.11➕ acceptsthe expected tree
BusyBox tarBusyBox v1.38.0, defconfig➕ acceptsthe expected tree
7-Zip7-Zip (z) 26.05 (x64)➕ acceptsthe expected tree
Python tarfile, filter=data, as in pipCPython 3.15.2➕ acceptsthe expected tree
Python tarfile, filter=tarCPython 3.15.2➕ acceptsthe expected tree
Python tarfile, filter=fully_trustedCPython 3.15.2➕ acceptsthe expected tree
node-tartar 7.5.22➕ acceptsthe expected tree
node-tar, stricttar 7.5.22➕ acceptsthe expected tree
tar-fstar-fs 3.1.3, on tar-stream 3.2.2➕ acceptsthe expected tree
Java Commons CompressCommons Compress 1.28.0, Expander, on Java 27.0.1.0.2➕ acceptsthe expected tree
.NET System.Formats.TarSystem.Formats.Tar of .NET 10.0.14, ExtractToDirectory➕ acceptsthe expected tree
PHP PharData, as in ComposerPharData of PHP 8.5.12, as Composer's TarDownloader calls it➖ rejectserror: UnexpectedValueException: phar error: "suite/archives/F56-number-size-base256.tar" is a corrupted tar file (invalid entry size)
Go containerd archive.Applycontainerd v2.4.2, archive.Apply, of go1.27.3➕ acceptsthe expected tree
Rust tartar 0.4.46, unpack➕ acceptsthe expected tree
Rust astral-tokio-tarastral-tokio-tar 0.7.1, unpack➕ acceptsthe expected tree
Rust tar-codec, as in uvtar-codec 0.0.16, with the policies of uv 0.13➖ rejectserror: at byte 0: invalid tar size field: found [128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0]
RubyGemsRubyGems 4.0.20 of Ruby 4.0.9, extract_tar_gz➖ rejectserror: Gem::Package::TarInvalidError: "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" is not an octal string
R untar, internalutils::untar of R 4.6.2, tar = "internal"➖ rejectserror: invalid octal digit
Perl Archive::TarArchive::Tar 3.12 of Perl v5.44.0➕ acceptsthe expected tree
Haskell tartar 0.7.2.0, extract, of GHC 9.14➕ acceptsthe expected tree
Julia Tar.jlTar 1.10.0 of Julia 1.13.3➕ acceptsthe expected tree
live-bootstrap untarmescc-tools-extra a151c245e512, as live-bootstrap pins it➖ rejectserror: Checksum failure The extraction of suite/archives/F56-number-size-base256.tar produced errors
live-bootstrap untar, --non-strictmescc-tools-extra a151c245e512, as live-bootstrap pins it➖ rejectserror: non-strict mode enabled, preparing for chaos Checksum failure The extraction of suite/archives/F56-number-size-base256.tar produced errors

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