--- /dev/null
+[short] skip
+[!fuzz-instrumented] skip
+
+env GOCACHE=$WORK/cache
+! go test -fuzz=FuzzDead -v
+# This is a somewhat inexact check, but since we don't prefix the error with anything
+# and as the error suffix is platform dependent, this is the best we can do. In the
+# deadlock failure case, the test will just deadlock and timeout anyway, so it should
+# be clear that that failure mode is different.
+stdout 'open'
+
+-- go.mod --
+module test
+
+-- cov_test.go --
+package dead
+
+import (
+ "os"
+ "path/filepath"
+ "testing"
+ "time"
+)
+
+func FuzzDead(f *testing.F) {
+ go func() {
+ c := filepath.Join(os.Getenv("GOCACHE"), "fuzz", "test", "FuzzDead")
+ t := time.NewTicker(time.Second)
+ for range t.C {
+ files, _ := os.ReadDir(c)
+ if len(files) > 0 {
+ os.RemoveAll(c)
+ }
+ }
+ }()
+
+ f.Fuzz(func(t *testing.T, b []byte) {
+ if len(b) == 8 &&
+ b[0] == 'h' &&
+ b[1] == 'e' &&
+ b[2] == 'l' &&
+ b[3] == 'l' &&
+ b[4] == 'o' &&
+ b[5] == ' ' &&
+ b[6] == ':' &&
+ b[7] == ')' {
+ return
+ }
+ })
+}
if !ok {
return CorpusEntry{}, minimizeResponse{}, errSharedMemClosed
}
+ defer func() { wc.memMu <- mem }()
mem.header().count = 0
inp, err := corpusEntryData(entryIn)
if err != nil {
return CorpusEntry{}, minimizeResponse{}, err
}
mem.setValue(inp)
- defer func() { wc.memMu <- mem }()
entryOut = entryIn
entryOut.Values, err = unmarshalCorpusFile(inp)
if err != nil {
mem.header().count = 0
inp, err := corpusEntryData(entryIn)
if err != nil {
+ wc.memMu <- mem
return CorpusEntry{}, fuzzResponse{}, true, err
}
mem.setValue(inp)