corpus

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 31, 2023 License: AGPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Corpus

type Corpus struct {
	// contains filtered or unexported fields
}

Corpus describes an archive of fuzzer-generated artifacts used to further fuzzing efforts. These artifacts are reusable across fuzzer runs. Changes to the fuzzer/chain configuration or definitions within smart contracts may create incompatibilities with corpus items.

func NewCorpus

func NewCorpus(corpusDirectory string) (*Corpus, error)

NewCorpus initializes a new Corpus object, reading artifacts from the provided directory. If the directory refers to an empty path, artifacts will not be persistently stored.

func (*Corpus) ActiveCallSequenceCount

func (c *Corpus) ActiveCallSequenceCount() int

ActiveCallSequenceCount returns the count of call sequences recorded in the corpus which have been validated and are ready for use by RandomCallSequence.

func (*Corpus) AddCallSequence

func (c *Corpus) AddCallSequence(seq calls.CallSequence, weight *big.Int, flushImmediately bool) error

AddCallSequence adds a call sequence to the corpus and returns an error in case of an issue

func (*Corpus) AddCallSequenceIfCoverageChanged

func (c *Corpus) AddCallSequenceIfCoverageChanged(callSequence calls.CallSequence, weight *big.Int, flushImmediately bool) error

AddCallSequenceIfCoverageChanged checks if the most recent call executed in the provided call sequence achieved coverage the Corpus did not with any of its call sequences. If it did, the call sequence is added to the corpus and the Corpus coverage maps are updated accordingly. Returns an error if one occurs.

func (*Corpus) CallSequenceCount

func (c *Corpus) CallSequenceCount() int

CallSequenceCount returns the total number of call sequences in the corpus, some of which may be inactive/not in use.

func (*Corpus) CallSequencesDirectory

func (c *Corpus) CallSequencesDirectory() string

CallSequencesDirectory returns the directory path where coverage increasing call sequences should be stored. This is a subdirectory of StorageDirectory. If StorageDirectory is empty, this is as well, indicating persistent storage will not be used.

func (*Corpus) CoverageMaps

func (c *Corpus) CoverageMaps() *coverage.CoverageMaps

CoverageMaps exposes coverage details for all call sequences known to the corpus.

func (*Corpus) Flush

func (c *Corpus) Flush() error

Flush writes corpus changes to disk. Returns an error if one occurs.

func (*Corpus) Initialize

func (c *Corpus) Initialize(baseTestChain *chain.TestChain, contractDefinitions contracts.Contracts) error

Initialize initializes any runtime data needed for a Corpus on startup. Call sequences are replayed on the post-setup (deployment) test chain to calculate coverage, while resolving references to compiled contracts.

func (*Corpus) RandomCallSequence

func (c *Corpus) RandomCallSequence() (calls.CallSequence, error)

RandomCallSequence returns a weighted random call sequence from the Corpus, or an error if one occurs.

func (*Corpus) StorageDirectory

func (c *Corpus) StorageDirectory() string

StorageDirectory returns the root directory path of the corpus. If this is empty, it indicates persistent storage will not be used.

func (*Corpus) UnexecutedCallSequence

func (c *Corpus) UnexecutedCallSequence() *calls.CallSequence

UnexecutedCallSequence returns a call sequence loaded from disk which has not yet been returned by this method. It is intended to be used by the fuzzer to run all un-executed call sequences (without mutations) to check for test failures. If a call sequence is returned, it will not be returned by this method again. Returns a call sequence loaded from disk which has not yet been executed, to check for test failures. If all sequences in the corpus have been executed, this will return nil.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL