Vixen
02b45cc4
csharp
public sealed class SyncListTarget

A synchronised list, taking operations off the wire.

No guide page documents this yet — the page shows what the code says about itself.

Remarks

The one collection whose contents are edited by a remote peer rather than replaced by one, which makes it the one place an index arrives from the network. Everything else reads values; this reads a position in a list it is about to mutate, and an unchecked one is an IndexOutOfRangeException on a receive path — which is precisely the failure the whole never-throws design exists to prevent.

Both directions are fuzzed by the same input: an incremental batch of operations and a whole list are the same wire shape apart from a leading count, so a mutation that reinterprets one as the other is reachable and is exactly the confusion worth finding.

Fields and properties (4)

  • public string Name

    What to call it on a command line and in a report.

  • public string What

    Which receive path this is, in one line.

  • public long Held

    How many items the list holds.

  • public long HeldCap

    How many it may hold. Above where Maintain clears it, so this asserts that the clear works rather than bounding a list whose length is the game's business.

Methods (4)

  • public long AllowanceFor(int inputLength)

    How many bytes an input may cause to be allocated.

  • public void Seed(ICollection<byte[]> corpus)

    Adds well-formed inputs for the mutator to start from.

  • public void Maintain()

    Puts the target back into a state worth fuzzing, before the next case.

  • public long Run(ReadOnlySpan<byte> input)

    Pushes one input through the decoder.

Used by (1)

  • FuzzTargetsVixen.Net.Fuzz