Pokritost zaznavanja
Izmerjeno, ne zgolj zatrjevano.
Vsaka številka spodaj je bila izmerjena tako, da smo v resnične vzorčne datoteke vnesli resnične poškodbe in prešteli, kaj je validator ujel — 100 poskusov na format in način, fiksen seed, surovi podatki za vsak poskus pa so v repozitoriju. Objavljamo tudi ničle: nekateri formati preprosto ne vsebujejo nobenega mehanizma celovitosti in raje vam to povemo, kot da bi namigovali drugače.
- Sniper — en sam naključni obrat bita na naključnem bajtnem odmiku — poškodba, ki jo je najtežje ujeti.
- Shotgun — 4096 zaporednih naključnih bajtov, prepisanih na naključnem odmiku — simulira okvarjen diskovni sektor.
Stopnje zaznavanja rastejo z vsako izdajo: globinski dekodirniki se dodajajo format za formatom in ta tabela se vsakič znova ustvari iz surovih merilnih podatkov.
Opombe o mehanizmih so prikazane v angleščini: gre za poglobljene tehnične opise, ohranjene dobesedno iz merilnega poročila.
Slike in fotografije
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Slika PNGPNG | 100% | 100% | 100% | CRC32 per chunk | |
| Slika JPEG XLJXL | 87% | 97% | 100% | Container + frame checksums | |
| Slika WebPWebP | 83% | 82% | 84% | libwebp full decode | |
| Ikona macOSICNS | 97% | 97% | 100% | TLV chunk stream; near-total coverage | |
| Flash SWFSWF | 100% | 100% | 100% | CWS = zlib wrapper; any flip = zlib CRC fail | |
| Vektorska grafika SVGSVG | 45% | 98% | 99% | XML parse — almost any corruption breaks the XML grammar. | |
| Ikona WindowsICO | 63% | 54% | 70% | Directory entries + embedded PNG/BMP image validation. Multi-resolution ICO has high structural-byte density. | |
| Slika QOIQOI | 0% | 0% | 0% | QOI spec has no per-opcode checksum — bit flips in pixel data decode to different-but-valid pixels. Only magic (4 B) and end marker (8 B) are checkable. Fundamental format limit. | |
| Slika JPEG2000JPEG2K | 6% | 5% | 97% | Codestream marker structure | |
| Slika GIFGIF | 9% | 35% | 100% | LZW decode (shotgun desyncs state); larger animated fixture lifts header-tamper detection | |
| Slika JPEGJPEG | 4% | 8% | 100% | jpegz wrapperDecode (062393f); most single-byte tamper lands in entropy-coded data, which JPEG tolerates by design | |
| Slika OpenEXR HDREXR | 1% | 0% | 100% | ZIP-compressed EXR — zlib decompress path runs on every scanline block. Shotgun detection perfect; sniper lower than the 26 KB NONE-compressed sample (6%) because structural bytes are a smaller fraction on the larger file. Both paths validated. | |
| Adobe PhotoshopPSD | 2% | 2% | 50% | RLE-compressed PSD — `validatePsdDeep` decodes every scanline. The old RAW-compressed `sample.psd` (0%/7%) is retained; sweep picks the larger RLE one. Measures the strong path that the RAW sample couldn't exercise. | |
| Slika HEIC/HEIFHEIC | 0% | 0% | 4% | H.265 CABAC per tile; no content checksum, so many entropy-payload flips decode as different valid pixels. Structural, NAL, RBSP, and decoder-state violations are still detectable. | |
| Slika AVIFAVIF | 0% | 0% | 1% | AV1 OBUs with entropy-coded tile data; no image-content checksum, so many payload flips can remain syntactically valid. Container/OBU structure and decoder errors are still detectable. | |
| Slika BMPBMP | 0% | 0% | 0% | BMP spec has no data checksums — `bmp_decoder.validateBmp` walks every pixel row proving accessibility but cannot detect bit-flips in pixel bytes. 0/400 at ±0.5% CI. Fundamental format limit. | |
| Slika DPXDPX | 0% | 0% | 0% | Raw pixel; SMPTE 268M spec has no checksum | |
| Slika Portable AnymapPAM/PPM | 0% | 0% | 0% | Raw pixel; Netpbm spec has no checksum | |
| Slika TGATGA | 25% | 27% | 100% | Header + image-spec validation catches malformed-byte tamper; tiny 11 KB fixture pushes structural-byte density up | |
| Slika TIFFTIFF | 63% | 93% | 100% | Every IFD plus every LZW-compressed strip/tile is decoded with tiffz's shared strict lzwz core. Required EOD plus exact decoded strip/tile extent reject truncation and excess output; valid-but-different LZW streams still have no pixel checksum. Deterministic 100-trial seed-42 sweep: 63% sniper, 93% bolter, 100% shotgun. | |
| Dvonivojska slika JBIG2JBIG2 | 0% | n/a | n/a | Bi-level image stream walk; sniper 0% on truncated sample. Shotgun N/A (sample < 4 KB). |
Kamerni RAW
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Adobe DNG RAWDNG | 3% | 3% | 3% | TIFF-based via tiffz strip+tile decode loop + jpegz preview decode; 77 MB sensor dump dilutes detection density per byte | |
| Canon CR2 RAWCR2 | 2% | 1% | 6% | TIFF-based; IFD-walked preview JPEG decoded via libjpeg-turbo (sRAW2 lossless strip filtered out so heuristic keeps the real preview) | |
| Nikon RAWNEF | 0% | 0% | 0% | TIFF-based; deep via zigimg | |
| Sony RAWARW | 0% | 4% | 15% | TIFF-based; deep via zigimg | |
| Fuji RAWRAF | 0% | 0% | 2% | Fuji; validator decodes the JPEG preview at 0x54/0x58, but preview is ~0.5% of a 208 MB sensor dump — shotgun almost never lands in it. ⚠ See Action Items. | |
| NRW | 0% | 1% | 0% | Nikon; dispatched through LibRaw which unpacks sensor data but the format has no per-row checksum. `libraw_unpack_thumb` is not currently wired up — adding it would catch corruption inside the embedded preview JPEG and could lift this to ~15-30% shotgun. Follow-up item. | |
| Olympus RAWORF | 0% | 0% | 0% | Olympus; validator WARNs on "uncompressed IFD claims but Huffman-compressed data". Structural-only. | |
| Pentax RAWPEF | 0% | 0% | 0% | Pentax; TIFF-wrapped. Structural-only. | |
| Panasonic RAWRW2 | 0% | 0% | 0% | Panasonic; TIFF-wrapped. Structural-only. | |
| Canon CR3 RAWCR3 (Canon) | 0% | 0% | 0% | ISOBMFF-based Canon RAW 3; structural box walk. 15 MB sample at 0%/0% confirms no integrity mechanism beyond structure. |
Video
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Video MatroskaMKV | 100% | 100% | 100% | CRC32 per EBML cluster — **gold standard** | |
| Video AV1AV1 | 5% | 6% | 100% | OBU structure + tile decode | |
| Transportni tok MPEGMPEG-TS | 4% | 5% | 100% | PAT/PMT CRC + continuity counters | |
| Standardna datoteka MIDIMIDI | 15% | 94% | 100% | Track framing + delta/event validation | |
| Video Apple ProResProRes/MOV | 5% | 7% | 78% | ProRes intra-frame DCT decode per frame | |
| Video MP4MP4 | 0% | 0% | 66% | H.264 CABAC + AAC decode (sample = `avc1` + AAC) | |
| Video QuickTimeMOV | 1% | 1% | 75% | H.264 CABAC decode — new sample generated from public-domain jellyfish footage via ffmpeg. Old MPEG-4 Part 2 sample kept in `sample.mov` but sweep now picks the larger H.264 one. | |
| Video WebMWebM (VP9+Opus) | 86% | 69% | 78% | libvpx 1.14.1 full VP9 decode per frame — every frame entropy + DCT decoded via `vpx_codec_decode`. Opus audio CRC provides additional coverage. | |
| Video WebMWebM (VP8) | 88% | n/a | 90% | libvpx 1.14.1 full VP8 decode. **Critical:** uses `VP8D_GET_FRAME_CORRUPTED` control query after each frame — without it, VP8's built-in error concealment silently patches bit flips. Both sniper and shotgun lift by ~90 points because of this query. | |
| Video AVIAVI | 0% | 20% | 93% | MJPEG per-frame decode via libjpeg-turbo — new sample generated via ffmpeg. Old MPEG-4 Part 2 sample kept in `generated_testsrc.avi` but sweep picks the larger MJPEG one. | |
| Video DVDV | 0% | 3% | 0% | DV spec has no checksum; relies on tape physical ECC | |
| Osnovni tok MPEGMPEG-ES | 0% | 0% | 0% | Start codes only | |
| Programski tok MPEGMPEG-1/2 | 0% | 0% | 0% | Start codes only | |
| MPEG-4 Part 2 | 0% | 0% | 0% | VOP header parsing tolerates VOP failures | |
| RealMediaRM | 0% | 1% | 2% | RealMedia spec has no checksums; structural chunk walk only | |
| Flash VideoFLV | 40% | n/a | n/a | Flash Video tag walk; no per-tag CRC. Tiny 33 B sample — sniper hits magic + header bytes. Shotgun N/A (sample < 4 KB). | |
| Programski tok MPEGMPEG-PS | 0% | n/a | n/a | MPEG Program Stream; PES header walk; no CRC. Shotgun N/A (sample < 4 KB). | |
| Video Ogg (Theora)Theora (.ogv) | 100% | n/a | 100% | Theora-in-Ogg; libtheora-encoded testsrc (CC0). Ogg page CRC32 catches every probed bit flip in both modes. | |
| Video vsebnik IVFVP8 (raw IVF) | 0% | 0% | 0% | IVF container with VP8 frames; structural-only without libvpx wired into the IVF dispatch path. Hand-authored CC0 sample. Detection is fundamentally low until VP8-in-IVF gets the same `VP8D_GET_FRAME_CORRUPTED` query as VP8-in-WebM. |
Zvok
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Zvok Dolby Digital AC-3AC3 | 100% | 100% | 100% | CRC-16 per syncframe. Previous sample `TomorrowNeverDies-...ac3` was malformed (started with bytes 0x84 4F 59 11, not AC3 sync 0B 77) — validator correctly rejected it, so the old 100%/100% number was a false positive from trial inheritance. Removed 2026-04-23; now measured against a genuinely valid sample. | |
| Zvok OggOGG | 100% | 100% | 100% | CRC32 per OGG page | |
| Zvok Dolby Digital PlusE-AC3 (large) | 100% | n/a | 100% | CRC-16 per syncframe (full file, after 2026-03-06 fix) | |
| Zvok Dolby Digital PlusE-AC3 (small) | 81% | 100% | 85% | ⚠ Lower coverage on smaller file — reflects frame-size / coverage density, not a bug | |
| Zvok FLACFLAC | 80% | 96% | 88% | MD5 audio hash + CRC-8/CRC-16 per frame | |
| Zvok Apple LosslessALAC | 1% | 0% | 100% | Lossless decode — 4KB overwrite kills a frame | |
| Opus | 1% | 62% | 35% | OGG page CRC + libopus decode | |
| Zvok M4AAAC (M4A) | 4% | 3% | 31% | MP4 box + AAC syntax decode | |
| Zvok AAC-LC (ADTS)AAC (ADTS) | 6% | 10% | 20% | ADTS framing + syntax | |
| Zvok MP3MP3 | 1% | 0% | 1% | Frame sync only — MP3 spec has no data CRC | |
| Zvok WAVWAV | 0% | 0% | 2% | RIFF structural; no data checksum | |
| Zvok AIFFAIFF | 0% | 0% | 1% | IFF structural; no data checksum | |
| Zvok CAFCAF | 0% | 0% | 1% | Chunk walk; no data checksum | |
| Zvok AU/SNDAU | 0% | 0% | 0% | Header + raw PCM | |
| Modul ProTrackerTracker (MOD) | 0% | 0% | 0% | No integrity mechanism in format | |
| Zvok AMRAMR | 14% | n/a | n/a | Adaptive Multi-Rate audio; frame-table based, no per-frame CRC. Sniper at 14% reflects sync-byte coverage on a 38 B sample. Shotgun N/A. | |
| Monkey's AudioAPE (Monkey's Audio) | 99% | 100% | 100% | MAC header + descriptor + per-frame CRC32. Full deep-decode validation now wired via vendored upstream Monkey's Audio SDK 12.73 (`deps/libape/`, BSD-3 since 2023). The validator runs structural rigor first (descriptor, header, seek-table monotonicity, audio-region bounds, field sanity, version range) then decodes every frame and surfaces per-frame CRC32-over-decoded-PCM mismatches via the C-shim `validate_ape_decode_check`. Truncation is caught either by the structural seek-table walk (modern v3980+ has audio_data_length) or by the decoder's sample-count-mismatch path. Synthetic 16 KB corpus is now a real APE encoded by the SDK from white-noise WAV (\`mac -c2000\`), so it actually decodes; sniper hits 99% (only the descriptor MD5 bytes — which are byte-level metadata not bitstream — escape detection in some random flips), shotgun hits 100%. Tested with the in-tree Zig tests + tests/cli/ape_validation (11 PASS). | |
| Karaoke CD+GraphicsCD+G (Karaoke) | 0% | 0% | 2% | 24-byte fixed-size sectors; structural only — no checksum. 0%/2% confirms fundamental format limit. | |
| Zvok DSDIFFDFF (DSDIFF) | 52% | n/a | n/a | DSD audio container; chunk walk only. Tiny 32 B header-only sample. Shotgun N/A. | |
| Datoteka DSD StreamDSF (DSD) | 60% | n/a | n/a | Sony DSD; structural walk. Shotgun N/A. | |
| Zvok DTS Digital SurroundDTS (Digital Surround) | 0% | 0% | 51% | Frame sync + size walk; no per-frame CRC. Shotgun lift from 4 KB overwrite desyncing the frame stream. | |
| True Audio (TTA)TTA (True Audio) | 97% | n/a | n/a | Per-frame CRC32 catches almost every probed bit flip. Shotgun N/A (sample < 4 KB). | |
| Zvok WavPackWavPack | 100% | 100% | 100% | libwavpack 5.9.0 deep decode: every block decoded to PCM, per-block CRC over decoded samples + checksum sub-block + sample-count drift. Block-checksum sub-block (`ID_BLOCK_CHECKSUM`) catches header/bitstream tampering at open-time; post-decode CRC catches arithmetic drift; truncation surfaces as decoded < expected sample count. |
Dokumenti in pisarna
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Excelova preglednica (97-2003)XLS | 22% | 24% | 96% | BIFF8 records + SST + formulas + cells | |
| Wordov dokument (97-2003)DOC (large) | 2% | 2% | 2% | FIB + 31 fc/lcb pair bounds + CLX piece table. Detection density drops on large docs — body text is most of the file. | |
| Wordov dokument (97-2003)DOC (small) | n/a | n/a | 52% | Same validator, smaller file — shotgun has ~21% chance of hitting FIB/Table/CLX. | |
| Dokument PDFPDF | n/a | n/a | n/a | †Headline numbers are misleading for PDF: detection rate is dominated by which compression filters the document uses for its embedded streams (Flate, DCT/JPEG, JPX/JPEG2000, JBIG2, CCITT), not by the validator. See "PDF detection by stream-filter dominance" subsection below for the breakout table. The exit-code bug from 2026-03-06 was fixed in commit `c304f36` (2026-04-23, Action Item #1). | |
| PowerPoint (97-2003)OLE2 (PPT) | 0% | 0% | 0% | FAT/directory structural only | |
| Dokument Adobe InDesignInDesign | 1% | 0% | 73% | Page structure. | |
| Wordov dokument (OOXML)DOCX | 87% | 82% | 100% | OOXML = ZIP with per-entry CRC32. Sample replaced 2026-04-23 from Apache 2.0 Tika test corpus. | |
| Excelova preglednica (OOXML)XLSX | 82% | 83% | 100% | OOXML = ZIP with per-entry CRC32. Sample from Apache Tika. | |
| PowerPoint (OOXML)PPTX | 93% | 97% | 100% | OOXML = ZIP with per-entry CRC32. Sample from Apache Tika. | |
| Besedilo OpenDocumentODT | 96% | 98% | 100% | ODF = ZIP with per-entry CRC32. Sample from Apache Tika. Note: currently auto-detected as EPUB (also ZIP) — separate detection-priority bug. | |
| Preglednica OpenDocumentODS | 88% | 88% | 100% | Same as ODT. | |
| Predstavitev OpenDocumentODP | 97% | 98% | 100% | Same as ODT. | |
| Rich Text FormatRTF | 0% | 0% | 92% | Structural only — RTF has no checksums. Shotgun high because 4 KB overwrite reliably breaks brace matching or control-word syntax. | |
| E-poštno sporočilo EMLEML | 12% | 97% | 84% | UTF-8 + NUL-byte integrity check on the raw file before structural parsing. NUL is never legal in a mail message; flipping the high bit of an ASCII byte produces a lone UTF-8 continuation byte. Caught ~50% of single-bit ASCII flips and ~80% of 4 KB shotgun overwrites. | |
| Poštni arhiv MBOXMBOX | 13% | 100% | 100% | Same UTF-8 + NUL-byte check as EML, applied to the whole concatenated file. Shotgun catches every 4 KB random overwrite (random bytes almost always include NUL or invalid UTF-8 sequences). Sniper catches roughly half the random bit flips. | |
| Apple PagesPages | 100% | 99% | 100% | iWork bundle = ZIP with per-entry CRC32. Hand-authored from scratch (no Apple software, no permissive corpus exists); `scripts/build-pages-sample` regenerates a deterministic 8-IWA inner `Index.zip` with high-entropy openssl-AES-CTR payloads plus real plist metadata. CRC32 per entry catches every bit flip and every 4 KB shotgun overwrite. | |
| Apple KeynoteKeynote | 99% | 100% | 100% | iWork bundle = ZIP with per-entry CRC32. Hand-authored mirroring the Pages sample; `scripts/build-keynote-sample` regenerates a 9-IWA inner `Index.zip` plus an uncompressed `buildVersionHistory.plist` carrying `com.apple.iWork.Keynote` so the format detector keys on it. CRC32 per entry catches every 4 KB shotgun overwrite and ~99% of single-bit flips. | |
| Apple NumbersNumbers | 100% | 99% | 100% | Same iWork-bundle template as Keynote with a Tables/-shaped IWA layout. The `com.apple.iWork.Numbers` marker is stored uncompressed at the head of the outer ZIP. CRC32 per entry catches every probed bit flip and every 4 KB shotgun overwrite. | |
| Adobe IllustratorAI (Adobe Illustrator) | 6% | n/a | n/a | PostScript-derived header + PDF body. Tiny 372 B sample is mostly PDF magic; later bytes are uncovered text. Shotgun N/A. | |
| Poročilo o stanju BAI2BAI2 (Bank Admin Inst.) | 20% | n/a | n/a | Fixed-format banking text; structural validation of record-type prefixes. No checksum. Shotgun N/A. | |
| Podatki CSVCSV | 26% | 100% | 100% | Structural CSV + mandatory UTF-8 validation. bolter/shotgun reliably produce invalid UTF-8 -> 100%; sniper 26% = flips landing in a multibyte sequence. (Was 0/0/0 before 2026-06-22: CSV was omitted from the extension-remap dispatch and silently skipped its UTF-8 check; fixed and guarded by tests/cli/utf8_required_formats_reject.) | |
| ClarisWorks/AppleWorksClarisWorks | 6% | n/a | n/a | Legacy AppleWorks. Structural walk. Shotgun N/A. | |
| UN/EDIFACTEDIFACT | 37% | n/a | n/a | Fixed-format trade messages; validator cross-checks UNH/UNT counts. Shotgun N/A. | |
| Encapsulated PostScriptEPS | 4% | n/a | n/a | PostScript header + structural walk. Shotgun N/A. | |
| E-knjiga EPUBEPUB | 69% | n/a | n/a | ZIP container with mimetype check; per-entry CRC32. Shotgun N/A. | |
| Dokument HTMLHTML | 22% | 100% | 100% | Tag-tree parse + UTF-8 validation gated on a declared charset (<meta charset=utf-8>). bolter/shotgun -> 100%; sniper 22% on the >=12 KB fixture. | |
| iCalendariCalendar (RFC 5545) | 21% | n/a | n/a | Structural; BEGIN/END pairing + property syntax. Shotgun N/A. | |
| Oznake Adobe InDesignIDML (InDesign) | 55% | n/a | n/a | ZIP+XML markup; per-entry CRC32. Shotgun N/A. | |
| Konfiguracija INIINI | 17% | n/a | n/a | Plain-text key-value; structural only. Shotgun N/A. | |
| Podatki JSONJSON | 43% | 100% | 100% | RFC 8259 mandates UTF-8: the validator rejects invalid UTF-8, then parses structure. On the >=12 KB multibyte fixture, bolter/shotgun almost always corrupt a UTF-8 sequence -> 100%; sniper 43% is the share of single-bit flips that land in a multibyte byte or a JSON token. | |
| JSON5 | 30% | n/a | n/a | JSON5 parser; structural only. Shotgun N/A. | |
| Bančni izpisek SWIFT MT940MT940 (SWIFT) | 11% | n/a | n/a | Banking text; structural only. Shotgun N/A. | |
| Dokument MacWriteMacWrite Document | 0% | n/a | n/a | Legacy word processor; structural only. Tiny sample. Shotgun N/A. | |
| Elektronska plačila NACHA/ACHNACHA (ACH) | 15% | n/a | n/a | Banking fixed-format text; record-type validation. Shotgun N/A. | |
| Open Financial ExchangeOFX (Open Financial) | 2% | n/a | n/a | Banking SGML/XML; structural only. Shotgun N/A. | |
| Golo besedilo (UTF-8)Plain Text | 0% | 0% | 95% | UTF-8 + control-char check. Invalid UTF-8 that is still Latin-1-decodable falls back to single-byte decode with a WARN (exit 0, so counted as not-detected) -> sniper/bolter ~0%; shotgun 95% because a random 4 KB overwrite injects NUL or undecodable bytes that hard-fail. | |
| Seja Pro ToolsPTX (Pro Tools) | 0% | 0% | 0% | Avid session structural walk. 0%/0% on 40 KB confirms structural-only. | |
| Quicken Interchange FormatQIF (Quicken Interchange) | 3% | n/a | n/a | Plain-text; structural only. Shotgun N/A. | |
| Konfiguracija TOMLTOML | 42% | 100% | 100% | TOML structural parse + mandatory UTF-8. bolter/shotgun -> 100% (invalid UTF-8); sniper 42% on the >=12 KB multibyte fixture. | |
| Tax Exchange FormatTXF (Tax Exchange) | 3% | n/a | n/a | Plain-text; structural only. Shotgun N/A. | |
| vCardvCard (RFC 6350) | 32% | n/a | n/a | Structural BEGIN/END pairing + property syntax. Shotgun N/A. | |
| Dokument WordPerfectWordPerfect | 2% | n/a | n/a | Header walk; structural only. Shotgun N/A. | |
| X12 EDI | 21% | n/a | n/a | Fixed-format trade messages; ISA/IEA + GS/GE counts cross-validated. Shotgun N/A. | |
| Dokument XMLXML | 52% | 100% | 100% | XML well-formedness + mandatory UTF-8. bolter/shotgun -> 100%; sniper 52% from tag/quote/multibyte density on the >=12 KB fixture. | |
| Podatki YAMLYAML | 0% | n/a | n/a | Plain-text; structural only. Shotgun N/A. | |
| Besedilo MarkdownMarkdown | 0% | n/a | n/a | Plain-text; structural only. Shotgun N/A. |
Pisave
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Pisava TrueTypeTTF | 100% | 100% | 100% | Per-table checksum + whole-file checkSumAdjustment (strict mode) | |
| Pisava OpenTypeOTF | 100% | 100% | 100% | Per-table checksum + whole-file checkSumAdjustment | |
| Pisava WOFFWOFF | 100% | 100% | 100% | Per-table zlib-decompress + origChecksum verification (font_validator.zig:370). Prior "0%/0%" was a stale sweep — the code was already doing the right thing. | |
| Pisava WOFF2WOFF2 | 49% | 63% | 100% | Per-table Brotli-decompress + origChecksum verification. Prior "0%/0%" was a stale sweep. Sniper is lower than WOFF because WOFF2's Brotli framing is more compact (fewer structural bytes), but shotgun still perfect. |
Znanost
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Astronomski podatki FITSFITS (with CHECKSUM) | 100% | n/a | 100% | CHECKSUM/DATASUM per HDU | |
| Astronomski podatki FITSFITS (no CHECKSUM) | 0% | 0% | 2% | Keyword validation only | |
| Medicinska slika DICOMDICOM | 7% | 9% | 20% | Tag structure + value validation | |
| Znanstveni podatki HDF5HDF5 | 4% | 72% | 13% | Jenkins lookup3 checksum (small file) | |
| Beljakovinska struktura PDBPDB (Protein) | 16% | 19% | 39% | ATOM/HETATM record cross-validation | |
| Kristalografski podatki CIFCIF (Crystallographic Info) | 0% | n/a | n/a | Plain-text scientific format; structural only. Shotgun N/A. | |
| Zaporedje FASTAFASTA | 22% | n/a | n/a | Plain-text bioinformatics; structural only. Shotgun N/A. | |
| Sekvenčni odčitki FASTQFASTQ | 28% | n/a | n/a | Plain-text bioinformatics; per-record sequence/quality length cross-check. Shotgun N/A. | |
| Podatki MATLABMAT-File | 94% | n/a | n/a | Element header + flag walk; magic + endian + tag length validation. Shotgun N/A. | |
| Znanstveni podatki NetCDFNetCDF | 39% | n/a | n/a | NetCDF classic header walk; HDF5-derived NetCDF-4 reuses HDF5's lookup3 checksums. Tiny sample. Shotgun N/A. | |
| Nevroslikanje NIfTINIfTI-1 | 1% | n/a | n/a | Header magic + dims; no checksum. Shotgun N/A. | |
| Podatki Apache ParquetParquet | 2% | n/a | n/a | Footer + page CRC32 (not currently verified by validator beyond header). Shotgun N/A. | |
| ESRI ShapefileShapefile | 89% | n/a | n/a | GIS .shp; record-by-record header check + magic. Shotgun N/A. |
Podatkovne baze
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Datoteka podjetja QuickBooksQBW | 100% | 100% | 100% | CRC32 per 4096-byte page (v12+) | |
| Zbirka podatkov SQLiteSQLite | 54% | 52% | 100% | Page headers + btree structure | |
| Zbirka podatkov Microsoft AccessACCDB | 1% | 0% | 73% | Jet engine page structure (small file) | |
| Zbirka podatkov Microsoft Access (97-2003)MDB | 1% | 0% | 73% | Jet engine page structure (small file) | |
| Varnostna kopija QuickBooksQuickBooks Backup (.qbb) | 8% | 7% | 24% | OLE2-based; dispatches through document_validators (no per-stream checksum). Sample shared with ole2/sample.doc. | |
| Zbirka podatkov dBASEdBASE (.dbf) | 0% | 0% | 100% | Header version + date + record-length cross-validation; hand-authored CC0 dBASE III. Sniper rate fundamental (no per-record checksum); shotgun lands in tail records past header-declared range. |
Arhivi
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Arhiv Compact ProCPT | 100% | 100% | 100% | CRC per resource fork entry (Compact Pro archive, not audio) | |
| Arhiv TarTAR | 15% | 78% | 73% | Header checksum per 512-byte block | |
| Arhiv 7-Zip7z | 99% | n/a | 100% | 7z next-header CRC32 + per-stream CRC32. Hand-authored xorshift corpus (CC0). Both sniper and shotgun catch nearly every flip. | |
| Arhiv Unix arAR (Unix archive) | 38% | n/a | n/a | `!<arch>\n` magic + 60-byte member headers; no per-entry checksum. Shotgun N/A. | |
| Arhiv BLIPBLAR (Blake3 Archive) | 100% | n/a | n/a | Peter's archive format with Blake3 per-entry hashing. Every probed bit flip detected. Shotgun N/A. | |
| Stisnjeno BrotliBrotli | 47% | 72% | 100% | Raw Brotli stream; full streaming decompression via libbrotli. RFC 7932 has no whole-file checksum, but the entropy coder rejects most structurally invalid prefix codes / distance overflows / window-bits errors. ~47% of single-bit flips on dense English-text Huffman streams cascade into decoder failure; the rest decode to wrong-but-valid bytes (silent). 4 KB shotgun overwrites are essentially always rejected. Earlier 0%/0% row used a pathological xorshift random-noise corpus where compressed output is ~8 bits/byte and bit flips are statistically valid Huffman codes; replaced with a deterministic CC0 English-text corpus (scripts/build-brotli-corpus). | |
| Stisnjeno Bzip2Bzip2 | 100% | 100% | 100% | CRC32 per block + combined CRC. Hand-authored xorshift corpus (CC0). | |
| Arhiv Microsoft CabinetCAB (Microsoft) | 100% | 100% | 100% | Per-folder + per-file CSUM (Adler-like) cross-validated. CC0 sample built via gcab. | |
| Stisnjeno GzipGzip | 100% | 100% | 100% | CRC32 + ISIZE in trailer. Hand-authored xorshift corpus (CC0). | |
| Arhiv BinHex 4.0BinHex (.hqx) | 100% | 100% | 100% | BinHex 4.0 header + per-fork CRC16. Hand-authored CC0 sample (encoder reverse-engineered from validator). | |
| Mini-arhiv BLIPMBLAR (Multi-Blake3) | 100% | n/a | n/a | Peter's manifest-bundle archive; Blake3 per file. Shotgun N/A. | |
| Paritetni arhiv PAR2PAR2 | 100% | 100% | 100% | MD5 of every packet + recovery slice integrity. Built via par2cmdline (BSD-licensed). | |
| Arhiv RARRAR | 100% | 100% | 100% | Per-entry CRC32 + RAR5 BLAKE2sp option. CC0 corpus (rar -m5). | |
| Arhiv StuffItStuffIt | 94% | n/a | n/a | Header + entry walk; sniper 94% on 140 B from header dominance. Shotgun N/A. | |
| Stisnjeno XZXZ | 100% | 100% | 100% | CRC32/CRC64/SHA-256 per stream + index integrity. Hand-authored xorshift corpus (CC0). | |
| Arhiv ZIPZIP | 100% | 100% | 100% | Per-entry CRC32 + EOCD record. Hand-authored xorshift corpus (CC0). | |
| Stisnjeno ZstandardZstd | 100% | 100% | 100% | Frame-level XXH64 + frame footer. Hand-authored xorshift corpus (CC0). | |
| Projekt Studio OneStudio One Project (.song) | 100% | 99% | 100% | ZIP-based; per-entry CRC32 + metainfo.xml integrity. Hand-authored CC0 sample. | |
| Arhiv StuffIt XStuffIt X (.sitx) | 0% | 0% | 0% | Magic + structural header walk only; no per-entry checksums in current validator. Hand-authored. |
Igralni ROM-i
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| ROM SNESSNES | 100% | 100% | 99% | Internal ROM checksum + complement | |
| ROM Game BoyGB | 0% | 100% | 1% | Header checksum only (tiny coverage) | |
| ROM Game Boy AdvanceGBA | 0% | 0% | 0% | Header checksum only | |
| ROM Sega GenesisGenesis | 0% | 100% | 1% | Header checksum only | |
| ROM NESNES | 0% | 0% | 0% | iNES header only | |
| ROM Nintendo 64N64 | 0% | 10% | 0% | No integrity mechanism | |
| Slika MAME CHDCHD (MAME) | 10% | n/a | n/a | MAME's compressed disc; SHA-1 per hunk + global SHA-1. Tiny synthetic 124 B sample. Shotgun N/A. | |
| ROM Nintendo DSNDS (Nintendo DS) | 41% | n/a | n/a | Header CRC16 (logo + secure area). 41% sniper on 1 KB. Shotgun N/A. | |
| Arhiv DOOM WADWAD (Doom/Wii) | 100% | n/a | n/a | Lump table; structural only. Tiny synthetic sample — header IS most of file. Shotgun N/A. |
Slika diska / datotečni sistem / izvedljive datoteke / drugo
| Format | Sniper | Bolter | Shotgun | izmerjeno | Kako se ujame (ali zakaj se ne more) |
|---|---|---|---|---|---|
| Diskovna slika AppleDMG | 0% | 0% | 10% | Plist + koly trailer | |
| Diskovna slika ISO 9660ISO | 0% | 0% | 0% | PVD structural only | |
| Predmetna datoteka COFFCOFF | 0% | 0% | 1% | Section header structure | |
| Univerzalna binarna datoteka Mach-OMach-O Fat | 0% | 0% | 0% | Architecture header only | |
| Blorb interaktivna fikcijaBlorb | 0% | 0% | 0% | IFF structural only | |
| macOS DS_StoreDS_Store | 0% | 0% | 25% | BTree page structure | |
| Medij ASFASF | 1% | 4% | 0% | GUID/object structural | |
| Podatkovna datoteka QuickenQDF | 1% | 1% | 0% | OLE2/ZIP structural | |
| 3D izdelava 3MF3MF (3D Manufacturing) | 75% | n/a | n/a | ZIP-based; per-entry CRC32 + XML manifest. Shotgun N/A (sample < 4 KB). | |
| Projekt Adobe After EffectsAEP (After Effects Project) | 27% | n/a | n/a | RIFX container; structural-only walk. Tiny sample (44 B). Shotgun N/A. | |
| Ableton Live SetALS (Ableton Live Set) | 90% | n/a | n/a | gzip-wrapped XML. Tiny sample — gzip CRC32 + zlib structure catches most bit flips. Shotgun N/A. | |
| Zbirka podatkov Apple Media LibraryApple Media DB | 46% | n/a | n/a | tvdb/photo SQLite-derived store. Structural walk. Shotgun N/A. | |
| Projekt GarageBandGarageBand (.band) | 0% | n/a | n/a | Bundle (directory) format — `projectData` inside is a plist routed to plist validator. Sweep-only on the plist file. Shotgun N/A. | |
| Bajtna koda Erlang/Elixir BEAMBEAM (Erlang) | 36% | n/a | n/a | FOR1/IFF chunk container; chunk lengths cross-validated. No CRC. Shotgun N/A. | |
| 3D projekt BlenderBlender (.blend) | 47% | n/a | n/a | DNA-block-based binary. Structural walk; no checksum. Tiny header-only sample. Shotgun N/A. | |
| Datoteka zemljevida BSPBSP (Quake) | 39% | n/a | n/a | Lump-table walk; no CRC. Structural only. Shotgun N/A. | |
| Projekt Bitwig StudioBitwig Project | 0% | n/a | n/a | ZIP-derived but tiny sample (128 B). Sniper 0% — sample is below ZIP minimum. Shotgun N/A. | |
| Vir Chromium PAKChromium PAK | 0% | n/a | n/a | Resource bundle; index walk only. Tiny synthetic sample. Shotgun N/A. | |
| Projekt CubaseCubase Project | 49% | n/a | n/a | Steinberg binary. Structural only. Shotgun N/A. | |
| Potrdilo/ključ DERDER (ASN.1) | 7% | n/a | n/a | TLV-walked. Structural; no checksum. Shotgun N/A. | |
| Projekt DaVinci ResolveDRP (DR Painter) | 60% | n/a | n/a | Generic binary — high sniper from header dominance. Shotgun N/A. | |
| Risba AutoCADDWG (AutoCAD) | 1% | n/a | n/a | Section structure walk. Tiny sample. Shotgun N/A. | |
| AutoCAD DXFDXF (AutoCAD) | 5% | n/a | n/a | Plain-text CAD; structural only. Shotgun N/A. | |
| Predloga EEx/ERBErlang Mix .eex | 0% | n/a | n/a | Plain-text template; structural only. Shotgun N/A. | |
| Izvršljiva datoteka ELFELF | 20% | n/a | n/a | Section header walk; no whole-file checksum. Tiny synthetic 64 B sample. Shotgun N/A. | |
| Izraz ErlangErlang BERT | 0% | n/a | n/a | External Term Format walk. Shotgun N/A. | |
| Final Cut Pro XMLFCPXML (Final Cut) | 58% | n/a | n/a | XML-based; structural walk. Shotgun N/A. | |
| Projekt FL StudioFL Studio | 6% | n/a | n/a | Project file structural walk. Tiny sample. Shotgun N/A. | |
| Binarni glTF (GLB)GLB (glTF binary) | 32% | n/a | n/a | Chunk-based; structural walk. JSON chunk + BIN chunk lengths cross-validated. Shotgun N/A. | |
| 3D prizor glTFglTF (JSON) | 20% | n/a | n/a | JSON manifest; structural only. Shotgun N/A. | |
| Vsebnik IFFIFF (EA) | 46% | n/a | n/a | Chunk walk; no CRC. Shotgun N/A. | |
| Razredna datoteka JavaJava .class | 21% | n/a | n/a | ClassFile constant pool walk; magic + version check. Shotgun N/A. | |
| Geografski podatki KMLKML | 58% | n/a | n/a | GIS XML; structural only. Shotgun N/A. | |
| Stisnjeni KML (KMZ)KMZ | 95% | n/a | n/a | KMZ = zipped KML; per-entry CRC32 catches almost any bit flip on the small sample. Shotgun N/A. | |
| Projekt Logic Pro XLogic Pro X | 71% | n/a | n/a | Bundle format — sample is `ProjectData` plist alone. Shotgun N/A. | |
| Larian Studios PAKLSPK (Larian Studios) | 3% | n/a | n/a | Pak file; structural only. Shotgun N/A. | |
| Binarna datoteka Mach-OMach-O | 0% | n/a | n/a | Single-arch sample; load command walk; no checksum. Shotgun N/A. | |
| 3D model Wavefront OBJOBJ (Wavefront) | 44% | n/a | n/a | Plain-text 3D; vertex/face syntax check. Shotgun N/A. | |
| Arhiv Quake PAKPAK (Quake) | 60% | n/a | n/a | Header offset/length cross-check. Tiny synthetic sample (12 B). Shotgun N/A. | |
| Izvršljiva datoteka Windows PEPE (Windows) | 3% | n/a | n/a | MZ + PE headers; optional checksum (rarely populated). Tiny sample. Shotgun N/A. | |
| Potrdilo/ključ PEMPEM (RFC 7468) | 51% | n/a | n/a | Base64 envelope; structural only. Shotgun N/A. | |
| Podpisano sporočilo PGPPGP Signed Message | 81% | n/a | n/a | Header/footer detect + Base64 walk. Shotgun N/A. | |
| Apple Property ListPlist | 52% | n/a | n/a | Both XML and binary plist; structural only. Shotgun N/A. | |
| Datoteka mnogokotnikov PLYPLY (3D) | 51% | n/a | n/a | Header + element count; no per-element checksum. Shotgun N/A. | |
| Projekt Adobe Premiere ProPremiere Project | 55% | n/a | n/a | Gzip-wrapped XML. Tiny sample. Shotgun N/A. | |
| Projekt ReasonReason (Propellerhead) | 33% | n/a | n/a | Bundle binary; structural walk. Shotgun N/A. | |
| Projekt ReaperRPP (Reaper) | 50% | n/a | n/a | Plain-text project; structural only. Shotgun N/A. | |
| Oblikovalska datoteka SketchSketch (.sketch) | 56% | n/a | n/a | ZIP-based; per-entry CRC32. Shotgun N/A. | |
| Podpis SSHSSH Signature | 64% | n/a | n/a | RFC 4880-like wire-format walk. Shotgun N/A. | |
| Model CAD STEPSTEP (.step) | 23% | n/a | n/a | ISO 10303-21 plain-text CAD. Shotgun N/A. | |
| 3D model STLSTL (3D) | 73% | n/a | n/a | Both ASCII and binary stl; sniper 73% on small ASCII sample. Shotgun N/A. | |
| Diskovna slika Roxio ToastToast (Roxio) | 0% | 0% | 10% | Apple Toast disc image; structural walk. | |
| Pisava Type 1Type 1 Font | 0% | n/a | n/a | PostScript-derived font; eexec encrypted body walk. Shotgun N/A. | |
| Navidezni disk VMwareVMDK | 0% | 0% | 0% | VMware disk descriptor + extent walk. 65 KB sample at 0%/0% — structural-only. | |
| Arhiv Valve PAKVPK (Valve Pak) | 100% | n/a | n/a | Tiny synthetic 28 B sample; structural walk catches every flip (header IS the file). Shotgun N/A. | |
| Spletni arhiv WARCWARC (Web Archive) | 48% | n/a | n/a | Record header + content-length walk. Shotgun N/A. | |
| Modul WebAssemblyWebAssembly | 35% | n/a | n/a | Section LEB128 length walk; magic + version. Tiny sample. Shotgun N/A. | |
| Windows Imaging FormatWIM (Windows Imaging) | 8% | n/a | n/a | XPRESS/LZX section walk; partial integrity. Shotgun N/A. | |
| Namestitveni program MicrosoftMicrosoft Installer (.msi) | 0% | 0% | 43% | OLE2 compound file (no integrity beyond CFBF FAT structure). Built via wixl. Shotgun catches FAT/dir mismatch. | |
| Slika Windows ESDWindows ESD (.esd) | 1% | 0% | 0% | WIM variant with LZMS compression; structural header walk (208-byte WIM header). Hand-authored. | |
| Predprevedena glava LLVMLLVM Precompiled Header (.pch) | 0% | 0% | 0% | Magic ("CPCH") + LLVM bitcode signature only. Bitcode contents are version-specific; structural only. | |
| Serializirana diagnostika LLVMLLVM Serialized Diagnostics (.dia) | 0% | 0% | 0% | Magic ("DIAG") + LLVM bitcode signature only. Same limit as .pch. | |
| Omrežni zajem PCAPPCAP | 4% | 3% | 100% | Hand-authored (no sudo for tcpdump in nix sandbox). Walks every packet record's incl_len/orig_len; shotgun lands in valid trailer bytes that fail length checks. Fixed 64 MiB-stack-overflow bug in `validatePcap` while landing the sample. | |
| Omrežni zajem PCAPNGPCAPNG | 10% | 8% | 100% | Walks every PCAPNG block's declared length and matching trailing length across every section. Unknown packet payloads remain opaque, so this is structural—not a per-packet checksum guarantee. | |
| G-koda (3D tiskalnik/CNC)G-code | 27% | 99% | 98% | Text format; line-grammar walk catches 27% sniper (most flips break a coordinate or G/M code prefix). Shotgun 98% — large overwrite breaks too many lines to ignore. Hand-authored CC0. | |
| Podatki MessagePackMessagePack (.msgpack) | 0% | 0% | 0% | Type-tagged binary; validator walks tag stream but spec has no checksum. Most flips land in payload bytes that decode to different-but-valid values. Fundamental limit per RFC. Hand-authored CC0. | |
| Paket RPMRPM Package (.rpm) | 3% | 7% | 30% | RPM v3 lead + signature header + main header. Validator computes SHA-1 over main header (when sig tag 269 present). Shotgun 30% reflects header dominance vs payload mass. Built via rpmbuild (CC0 spec). Fixed 16 MiB-stack-overflow bug in `validateRpm` while landing the sample. |