Skip to content

Releases: Ledger-Donjon/absolution

v1.1.2

07 May 09:13
v1.1.2
9362204

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v1.1.1...v1.1.2

v1.1.1

23 Apr 13:37
v1.1.1
1d252c4

Choose a tag to compare

Absolution 1.1.0

What's New

Full Changelog: v1.1.0...v1.1.1

v1.1.0

20 Apr 09:55
v1.1.0
3ce15ec

Choose a tag to compare

Absolution 1.1.0

What's new

Features

  • .whole_values field domain — Constrain array-shaped fields with full-instance byte blobs (dense and strided layouts), unified with other constrained-domain selector rules; fixes emission for strided struct members and aligns fuzzer byte accounting.
  • Version information — Release builds now embed version information.

CI

  • Harden setup-zig: minimum Zig version is now validated before download.
  • Toolchain archives are verified with minisig.
  • Drop redundant checkout step and the Astral/uv dependency from the pipeline.
  • Disable CPU-specific optimizations in CI release builds.

What is Absolution?

Absolution parses globals from C translation units and emits a libFuzzer harness that:

  1. Samples global state from fuzzer input (with domain constraints)
  2. Calls your test harness
  3. Checks invariants (including padding zeroed)

This helps find bugs across different interleavings of calls, as long as the fuzzer can cover the space.

Requirements

  • Zig 0.15.2
  • C toolchain with libFuzzer (e.g. clang -fsanitize=fuzzer)
  • objcopy (GNU binutils or llvm-objcopy)

Full Changelog: v1.0.0...v1.1.0

v1.0.0

09 Mar 12:39
v1.0.0
d63a82f

Choose a tag to compare

Absolution 1.0.0

First stable release of Absolution, a tool for fuzzing C programs by sampling global state uniformly from an invariant.

What is Absolution?

Absolution parses globals from C translation units and emits a libFuzzer harness that:

  1. Samples global state from fuzzer input (with domain constraints)
  2. Calls your test harness
  3. Checks invariants (including padding zeroed)

This helps find bugs across different interleavings of calls, as long as the fuzzer can cover the space.

Features

  • Invariant language.zon invariants constrain field domains (.top, .values, .pointers)
  • CMake integrationabsolution_add_fuzzer() handles the full pipeline (parse → compile → objcopy → link)
  • Multi-translation-unit support — Symbol redefinition for static globals across TUs
  • Configurable harness — Custom entry function via --entry
  • Export and edit — Dump parsed modules to .zon for manual editing before emission
  • Transitive propagation — LINK_LIBRARIES propagate includes/defines to all stages
  • Sanitizer support — Default fuzzer,address; configurable per fuzzer target

Requirements

  • Zig 0.15.2
  • C toolchain with libFuzzer (e.g. clang -fsanitize=fuzzer)
  • objcopy (GNU binutils or llvm-objcopy)

Quick start

zig build
./zig-out/bin/absolution -h

./zig-out/bin/absolution \
  -t module_a.c -t module_b.c \
  --entry MyTestOneInput \
  --out fuzzer.c --redef fuzzer.redef --seed fuzzer.seed \
  -- -I path/to/include

See README.md and USAGE.md for the full workflow. The example/protocol_parser/ directory shows a complete CMake integration example.

Full Changelog: https://github.com/Ledger-Donjon/absolution/commits/v1.0.0