rust-fuzz / rust-fuzz/arbitrary

workaround to uses of arbitrary_loop causing non-determinism

Open
#199 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
880
Forks
93
PR merge metrics
No merged PRs in 30d

Description

I am implementing Arbitrary by hand and using it with cargo-fuzz. Ideally, I'd like to allow the fuzzer to control the length but I wanted to experiment with different upper bounds before picking one in the harness. However, I noticed that I could not re-use the corpus given changing the upper bound introduced non-determinism, and I'd like to be able to simply insert/ extend from the corpus instead of starting from scratch. Is there an alternative pattern to support looping being configurable without affecting how the rest of the input is interpreted?

For example, I have something in my harness very similar to https://github.com/bytecodealliance/wasm-tools/blob/main/crates/wasm-smith/src/core.rs#L1070 where I am modifying u.arbitrary_loop(Some(1), Some(100),. to u.arbitrary_loop(Some(1), Some(1000),.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the arbitrary_loop API and the wasm-smith harness example linked in the issue, then inspect how loop bounds consume input and affect subsequent interpretation. Determine whether an existing pattern supports changing bounds while reusing a corpus; done means documenting that pattern or defining a concrete API change with regression coverage.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
testing-qa
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.