| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .. | ||
| fuzz_targets | ||
| seeds/render_all | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
Fuzzing xai-grok-markdown
Coverage-guided fuzzing for the markdown renderer using cargo-fuzz (libFuzzer).
Prerequisites
cargo install cargo-fuzz # if not already installed
rustup toolchain install nightly
Targets
| Target | What it fuzzes |
|---|---|
render_all |
All 8 combos: pretty × syntect × {full, streaming} for every input |
Each iteration runs:
render_markdown_ratatui_full()— 4 combos (pretty/non-pretty × syntect/no-syntect)StreamingMarkdownRendererchar-by-char — same 4 combos
Running
From crates/codegen/xai-grok-markdown:
# Run indefinitely (Ctrl-C to stop):
cargo +nightly fuzz run render_all fuzz/corpus/render_all fuzz/seeds/render_all -- -max_len=16384
# Run for 5 minutes:
cargo +nightly fuzz run render_all fuzz/corpus/render_all fuzz/seeds/render_all -- -max_len=16384 -max_total_time=300
corpus/— auto-generated inputs (gitignored)seeds/— hand-written seed inputs (checked in)
Reproducing a crash
When a crash is found, the input is saved to artifacts/render_all/crash-<hash>. Reproduce it with:
cargo +nightly fuzz run render_all fuzz/artifacts/render_all/crash-<hash>
Adding seed inputs
Drop .txt or .md files into seeds/render_all/. Good seeds cover distinct markdown features (tables, code blocks, emoji, nested lists, etc.) and help the fuzzer reach new code paths faster.