feat(fuzzer): add deterministic fuzz loop and crash reports - #316
Conversation
|
@MaxiTech444 Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (5)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe Rust address fuzzer now mutates valid generated addresses, captures parser panics, and writes structured JSON findings. M-address payload ordering and round-trip tests are updated. CI runs from example directories and uploads the findings directory. ChangesAddress Fuzzer
Estimated code review effort: 3 (Moderate) | ~25 minutes Merge Risk: 🔵 Low · up to The fuzzer now records structured crash reports and continues after parser panics, but report files may be lost on write failure or overwritten across repeated runs, leaving a failed CI job without complete replay evidence. The PR is mergeable with explicit owner awareness and follow-up to make persistence more durable. Sequence Diagram(s)sequenceDiagram
participant FuzzLoop
participant AddressGenerator
participant Mutate
participant Parser
participant Report
FuzzLoop->>AddressGenerator: generate valid address
AddressGenerator-->>FuzzLoop: address input
FuzzLoop->>Mutate: apply selected mutator
Mutate-->>FuzzLoop: mutated input
FuzzLoop->>Parser: parse inside catch_unwind
Parser-->>FuzzLoop: success or panic payload
FuzzLoop->>Report: write Finding JSON on panic
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Linked Issues checkExplanation The PR implements issue Full details: Docstring CoverageExplanation Docstring coverage is 29.41% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 17 functions across 3 files. (2 skipped: 2 unsupported.)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@MaxiTech444 fix the CI workflow issue |
Cargo commands were running from repo root where no Cargo.toml exists. Add working-directory to point each step at the correct crate folder. 🤖 Generated with Codebuff Co-Authored-By: Codebuff <noreply@codebuff.com>
Done. |
|
PR reviewed |
Overview
This PR completes the Rust address fuzzer with a deterministic mutation loop and structured crash reporting. It generates valid Stellar address seeds, applies the existing mutators, executes the parser safely, and records replayable panic findings without stopping the remaining iterations.
Related Issue
Closes #309
Changes
🧪 Fuzzing Loop and Crash Reporter
[MODIFY]
examples/rust-address-fuzzer/src/main.rsstd::panic::catch_unwindso one panic does not terminate the fuzzing loop.--seed, including the seed and iteration in each finding.[MODIFY]
examples/rust-address-fuzzer/src/report.rsFindingrecords containing the input, mutator name, panic message, seed, and iteration.findings/finding-XXXXXX.json.[MODIFY]
examples/rust-address-fuzzer/src/generate.rs[MODIFY]
.github/workflows/fuzz.ymlfindings/directory when a fuzz run fails.Verification Results
catch_unwind--seedfixes the PRNG sequence and finding metadatafindings/directorySummary by CodeRabbit
Bug Fixes
New Features
Chores