A corpus is the saved collection of inputs a fuzzer uses as a starting point for future test runs. Good corpora preserve interesting edge cases and help the fuzzer reuse prior discoveries, making later runs more effective at reaching new branches and uncovering additional defects.
What the corpus does in fuzzing
A corpus is the fuzzer’s memory of previously seen inputs, not just a storage bucket. Its job is to preserve inputs that already proved useful so the fuzzer can reuse them, mutate from them, and keep exploring behaviours that random generation might miss.
For that reason, corpus quality often matters more than raw size. A small set of diverse, interesting inputs usually outperforms a large set of duplicates, because the corpus should widen coverage rather than repeat the same execution paths.
How a corpus improves coverage
Corpus inputs typically seed the fuzzer at startup and provide the baseline for later mutation rounds. When the fuzzer replays them, it can measure which inputs reach new branches, trigger new states, or expose parser and state-machine behaviour worth keeping.
This is why many fuzzing workflows treat corpus management as an ongoing process. New discoveries are added, weak or redundant samples are removed, and inputs are often normalised so the fuzzer can spend effort on meaningful variation instead of noise.
Corpus curation and quality signals
A useful corpus is usually diverse, minimised, and representative of the input space the target actually accepts. It should include valid examples, edge cases, boundary values, and malformed inputs that still advance execution in interesting ways.
Good corpus curation also avoids false value. Files that differ only cosmetically can waste cycles, while inputs that are too similar may crowd out better seeds. A well-curated corpus tends to improve both speed to coverage and the chance of uncovering deeper defects.
Where corpora sit in fuzzing workflows
In practice, the corpus sits between test generation and coverage feedback. The fuzzer consumes it as starting material, learns from it through execution feedback, and then feeds the most promising results back into the corpus for future rounds.
That feedback loop makes the corpus a living asset. As the target evolves, or as the fuzzer discovers new parsing paths, the corpus should evolve too, otherwise fuzzing regresses into repeatedly testing the same behaviours instead of expanding reach.