Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

#97

P2: Fuzz the metadata and workflow parsers

closed · opened by keenan 10d ago

keenan opened this 10d ago

Why

A push decides how much of this code runs, and none of it is fuzzed:

  • metadata/frontmatter.go and the issue, request, comment, and release parsers turn repository bytes into the objects every page renders.
  • ci/validate.go decodes workflow and image YAML with yaml.v3 into typed structs, and the same file decides what a job may name.

Both accept input from anyone allowed to push. A panic is an outage; a decoder that allocates without bound is an outage a small file causes.

Scope

  • Fuzz the metadata document parser: missing or duplicated frontmatter delimiters, duplicate keys, non-UTF-8 bytes, huge single values, deeply nested lists.
  • Fuzz workflow and image YAML decoding: unknown fields, anchors and aliases (including the alias-expansion bomb), wrong types, deep nesting, and documents at the repo_max_metadata_bytes boundary.
  • Assert the useful properties, not just “no panic”: a parse either fails with an error or produces a value that re-encodes to an equivalent document, and no input allocates beyond the size bound.
  • Seed from the existing tests and document the local fuzz budget, as for the transport parsers.

Acceptance

  • go test ./... runs each target’s seed corpus.
  • Each target survives a documented one-minute run without a finding.
  • A hostile YAML document that would expand unboundedly is refused, and the refusal has a test.

Part of #14.

Comments (0)

No comments yet.