From c7e64e2b4f3a9d7734a92aebc53f285cd6afd94b Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sun, 16 Dec 2018 13:53:22 +0100 Subject: vm: don't call Diagnose when VM hasn't crashed Fixes #875 --- vm/vm.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'vm/vm.go') diff --git a/vm/vm.go b/vm/vm.go index 26bd21745..b403956a6 100644 --- a/vm/vm.go +++ b/vm/vm.go @@ -230,10 +230,13 @@ type monitor struct { } func (mon *monitor) extractError(defaultError string) *report.Report { + crashed := defaultError != "" || !mon.canExit + if crashed { + mon.inst.Diagnose() + } // Give it some time to finish writing the error message. - mon.inst.Diagnose() mon.waitForOutput() - if bytes.Contains(mon.output, []byte(fuzzerPreemptedStr)) { + if bytes.Contains(mon.output, []byte("SYZ-FUZZER: PREEMPTED")) { return nil } if !mon.reporter.ContainsCrash(mon.output[mon.matchPos:]) { @@ -250,6 +253,9 @@ func (mon *monitor) extractError(defaultError string) *report.Report { } return rep } + if !crashed && mon.inst.Diagnose() { + mon.waitForOutput() + } rep := mon.reporter.Parse(mon.output[mon.matchPos:]) if rep == nil { panic(fmt.Sprintf("reporter.ContainsCrash/Parse disagree:\n%s", mon.output[mon.matchPos:])) -- cgit mrf-deployment