Your browser sucks, JavaScript disabled! Gunnar's console needs JavaScript and WebAssembly. Git over SSH on port 2222 does not.

nordisk/holger

fuzz/README.md

holger-fuzz

libFuzzer targets for Holger's untrusted parsers, in the cargo-fuzz layout (lane OSSF-NEXT, 2026-10-30). The table of targets and what each reads is in src/lib.rs.

target parser
bundle_verify update bundle: znippy index + members, core.json, the pinned-signer verify path
dsse_material DSSE / Sigstore bundle / PEP 740 / cosign / npm material, then verify_artifact
intoto_statement in-toto statement + SLSA predicate
x509_cert DER, certificate identity, SCTs
apk_index APKINDEX.tar.gz and its signature segment
package_metadata first byte picks: deb control, rpm header, Helm chart, Chart.yaml, wheel METADATA, declared licence, the inspector over every format

Run

With cargo-fuzz (nightly): cargo fuzz run <target>.

With plain stable cargo (what the dwarves forge does nightly):

RUSTFLAGS="--cfg fuzzing -Cpasses=sancov-module -Cllvm-args=-sanitizer-coverage-level=4 \
  -Cllvm-args=-sanitizer-coverage-inline-8bit-counters -Cllvm-args=-sanitizer-coverage-pc-table \
  -Cllvm-args=-sanitizer-coverage-trace-compares" \
  cargo build --release --manifest-path fuzz/Cargo.toml --bins --target-dir <dir>
<dir>/release/<target> -max_total_time=600 -artifact_prefix=<out>/ <scratch-corpus> fuzz/corpus/<target>

A crash is a bug: add its input as a regression test in the crate that owns the parser, fix it, and keep the input in corpus/<target>/.

Seeds

corpus/<target>/ holds the seeds src/seeds.rs makes (synthetic packages and the provenance crate's real public material). cargo test --manifest-path fuzz/Cargo.toml runs every seed through its target on stable and fails when a seed is not committed; HOLGER_FUZZ_WRITE_SEEDS=1 writes them. A package_metadata seed begins with its selector byte, so no seed begins with a package's magic number.