diff options
| author | Aleksandr Nogikh <nogikh@google.com> | 2024-10-24 10:15:09 +0200 |
|---|---|---|
| committer | Taras Madan <tarasmadan@google.com> | 2024-10-25 12:08:02 +0000 |
| commit | 479141f703a43adab07cba7f8b3c99399fbbeb68 (patch) | |
| tree | 7e3334fbfb856e4bc29bf5e8d016a4fefe4b842a /pkg/corpus/minimize.go | |
| parent | 945e91b794873481a34fe25de502ba96c8dc2a6b (diff) | |
pkg/corpus: support multiple focus areas
Focus area assigns a fuzzing priority to a set of PCs.
When running ChooseProgram(), corpus will first select a focus area
proportionally to the specified weights, and only then continue with
selecting a program belonging to it.
Diffstat (limited to 'pkg/corpus/minimize.go')
| -rw-r--r-- | pkg/corpus/minimize.go | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/pkg/corpus/minimize.go b/pkg/corpus/minimize.go index 8eac96122..d01e06f57 100644 --- a/pkg/corpus/minimize.go +++ b/pkg/corpus/minimize.go @@ -14,7 +14,7 @@ func (corpus *Corpus) Minimize(cover bool) { defer corpus.mu.Unlock() inputs := make([]signal.Context, 0, len(corpus.progs)) - for _, inp := range corpus.progs { + for _, inp := range corpus.progsMap { inputs = append(inputs, signal.Context{ Signal: inp.Signal, Context: inp, @@ -37,12 +37,19 @@ func (corpus *Corpus) Minimize(cover bool) { return len(first.Prog.Calls) < len(second.Prog.Calls) }) - corpus.progs = make(map[string]*Item) - programsList := &ProgramsList{} + corpus.progsMap = make(map[string]*Item) + + // Overwrite the program lists. + corpus.ProgramsList = &ProgramsList{} + for _, area := range corpus.focusAreas { + area.ProgramsList = &ProgramsList{} + } for _, ctx := range signal.Minimize(inputs) { inp := ctx.(*Item) - corpus.progs[inp.Sig] = inp - programsList.saveProgram(inp.Prog, inp.Signal) + corpus.progsMap[inp.Sig] = inp + corpus.saveProgram(inp.Prog, inp.Signal) + for area := range inp.areas { + area.saveProgram(inp.Prog, inp.Signal) + } } - corpus.ProgramsList.replace(programsList) } |
