func (mgr *Manager) minimizeCorpus() { if !mgr.cfg.Nocover && len(mgr.corpus) != 0 { // First, sort corpus per call. type Call struct { inputs []RpcInput cov []cover.Cover } calls := make(map[string]Call) for _, inp := range mgr.corpus { c := calls[inp.Call] c.inputs = append(c.inputs, inp) c.cov = append(c.cov, inp.Cover) calls[inp.Call] = c } // Now minimize and build new corpus. var newCorpus []RpcInput for _, c := range calls { for _, idx := range cover.Minimize(c.cov) { newCorpus = append(newCorpus, c.inputs[idx]) } } logf(1, "minimized corpus: %v -> %v", len(mgr.corpus), len(newCorpus)) mgr.corpus = newCorpus } var corpus []*prog.Prog for _, inp := range mgr.corpus { p, err := prog.Deserialize(inp.Prog) if err != nil { panic(err) } corpus = append(corpus, p) } mgr.prios = prog.CalculatePriorities(corpus) }
func (mgr *Manager) minimizeCorpus() { if len(mgr.corpus) == 0 { return } // First, sort corpus per call. type Call struct { inputs []RpcInput cov []cover.Cover } calls := make(map[string]Call) for _, inp := range mgr.corpus { c := calls[inp.Call] c.inputs = append(c.inputs, inp) c.cov = append(c.cov, inp.Cover) calls[inp.Call] = c } // Now minimize and build new corpus. var newCorpus []RpcInput for _, c := range calls { for _, idx := range cover.Minimize(c.cov) { newCorpus = append(newCorpus, c.inputs[idx]) } } logf(1, "minimized corpus: %v -> %v", len(mgr.corpus), len(newCorpus)) mgr.corpus = newCorpus }
func (mgr *Manager) minimizeCorpus() { if mgr.cfg.Cover && len(mgr.corpus) != 0 { // First, sort corpus per call. type Call struct { inputs []RpcInput cov []cover.Cover } calls := make(map[string]Call) for _, inp := range mgr.corpus { c := calls[inp.Call] c.inputs = append(c.inputs, inp) c.cov = append(c.cov, inp.Cover) calls[inp.Call] = c } // Now minimize and build new corpus. var newCorpus []RpcInput for _, c := range calls { for _, idx := range cover.Minimize(c.cov) { newCorpus = append(newCorpus, c.inputs[idx]) } } Logf(1, "minimized corpus: %v -> %v", len(mgr.corpus), len(newCorpus)) mgr.corpus = newCorpus } var corpus []*prog.Prog for _, inp := range mgr.corpus { p, err := prog.Deserialize(inp.Prog) if err != nil { panic(err) } corpus = append(corpus, p) } mgr.prios = prog.CalculatePriorities(corpus) // Don't minimize persistent corpus until fuzzers have triaged all inputs from it. if len(mgr.candidates) == 0 { hashes := make(map[string]bool) for _, inp := range mgr.corpus { h := hash(inp.Prog) hashes[hex.EncodeToString(h[:])] = true } for _, h := range mgr.disabledHashes { hashes[h] = true } mgr.persistentCorpus.minimize(hashes) } }