Dear Jochen, If you open font/tounicode2/testdata/fuzz/FuzzToUnicode/2566873a28045c1b (or whatever appears after "Failing input written to")The file should contain the exact values passed to the test. It will look a bit like this
go test fuzz v1 string(".") string("0") This might give you a hint as to what is causing the problem. If this doesn't help, it sounds to me like there is a nasty race condition hidden in the code (as fuzz tests run concurrently) or some global variable is accessed which is occasionally changed during the test. Thanks, -William On Wednesday, August 2, 2023 at 2:01:58 AM UTC-4 Jochen Voss wrote: > Dear all, > > Recently I find quite often that after "go test -fuzz" reported an error, > the command shown to re-run the test does not reproduce the failure. For > example, just now I got the following: > > voss@dumpling [..nt/tounicode2] go test -fuzz FuzzToUnicode > fuzz: elapsed: 0s, gathering baseline coverage: 0/2 completed > fuzz: elapsed: 0s, gathering baseline coverage: 2/2 completed, now fuzzing > with 10 workers > fuzz: elapsed: 3s, execs: 280461 (93481/sec), new interesting: 24 (total: > 26) > fuzz: elapsed: 5s, execs: 410320 (72348/sec), new interesting: 60 (total: > 62) > --- FAIL: FuzzToUnicode (4.80s) > --- FAIL: FuzzToUnicode (0.00s) > tounicode_test.go:129: template: tounicode:26:2: executing > "tounicode" at <Single $cs .>: error calling Single: runtime error: integer > divide by zero > > Failing input written to testdata/fuzz/FuzzToUnicode/2566873a28045c1b > To re-run: > go test -run=FuzzToUnicode/2566873a28045c1b > FAIL > exit status 1 > FAIL seehuhn.de/go/pdf/font/tounicode2 4.957s > voss@dumpling [..nt/tounicode2] go test -run=FuzzToUnicode/2566873a28045c1b > PASS > ok seehuhn.de/go/pdf/font/tounicode2 0.122s > > The fuzzer reported a failure, and when I re-run the test I get a "PASS". > > How to debug such a problem? > > I understand that my fuzz function may somehow be non-deterministic, but > so far I have not found any cause of non-determinism and re-running the > test 10 times gives me 10 passes. Also, for a bug the fuzzer reported > earlier, I found it very hard to believe that the given input could make > the fuzz function reach the site of the error message. Could it be that > the fuzzer sometimes looses track of which input belongs to which fuzzing > run, and then reports the wrong input? > > If somebody wants to play with this, here is how to reproduce (up to > randomness) the fuzzing run shown above: > > git clone https://github.com/seehuhn/go-pdf.git > cd go-pdf/ > git reset --hard 26c235ad > cd font/tounicode2/ > go test -fuzz FuzzToUnicode > > Any suggestions on how to debug such errors would be most welcome. > > Many thanks, > Jochen > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/c47eac25-e4b2-4c35-a29d-c5822159d0a1n%40googlegroups.com.