Skip to content

Fuzz the parsers, and replay the seed corpus inside the gating build #86

Description

@iderex

The target gate does something with fuzzing worth copying exactly. The
coverage-guided run is scheduled and non-gating, because it is slow. The seed
corpus is replayed inside the gating build, because that is fast, and it catches
the case where a change makes a known-hostile input throw something the code does
not name.

The two are different questions. One looks for new inputs. The other proves the
inputs already known to be hostile are still handled.

This repository has more parser surface than the target does, because it decodes
images from a network as well as parsing server responses, and an image decoder
is the most attacked thing here.

What this produces

Fuzz targets over every parser the core exposes to server-supplied bytes: the
response decoding, the address parsing in #28, and the image format handling in
#55.

A committed seed corpus per target, including every input that has ever caused a
defect.

A replay of the whole corpus inside the gating build, failing on any unnamed
exception. The target list derived from the corpus directories rather than
written in the workflow, so a target added by having a corpus cannot be silently
uncovered by a list nobody updated. An empty corpus directory fails rather than
passing quietly, since replaying nothing proves nothing.

The harness compiled by the gating build even though the coverage-guided run is
scheduled, so a rename that breaks the harness reddens the pull request that
caused it rather than a scheduled run days later.

Done when

Each target has a corpus with at least one seed, the gating build replays all of
them, an empty corpus reddens the build, and a deliberately unhandled input in a
seed reddens it. Blocked on #28, #37, #55 and #101.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions