Skip to content

Releases: Ledger-Donjon/absolution

v1.1.2

Choose a tag to compare

@0pendev 0pendev released this 07 May 09:13
v1.1.2
9362204

What's Changed

New Contributors

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

v1.1.1

Choose a tag to compare

@0pendev 0pendev released this 23 Apr 13:37
v1.1.1
1d252c4

Absolution 1.1.0

What's New

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

v1.1.0

Choose a tag to compare

@0pendev 0pendev released this 20 Apr 09:55
v1.1.0
3ce15ec

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

Choose a tag to compare

@0pendev 0pendev released this 09 Mar 12:39
v1.0.0
d63a82f

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