1
0
mirror of https://github.com/golang/go synced 2024-11-23 07:50:05 -07:00

testing: panic in Fuzz if the function returns a value

Otherwise, the behavior of a fuzz target that returns an error could
be confusing.

Fuzz is already documented to require a function “with no return
value”, so this fixes the implementation to match the existing
documentation.

Fixes #51222

Change-Id: I44ca7ee10960214c92f5ac066ac8484c8bb9cd6f
Reviewed-on: https://go-review.googlesource.com/c/go/+/386175
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Reviewed-by: Nooras Saba‎ <saba@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
This commit is contained in:
Bryan C. Mills 2022-02-16 10:52:01 -05:00 committed by Bryan Mills
parent 5d8d387849
commit f985833dec
2 changed files with 22 additions and 0 deletions

View File

@ -0,0 +1,19 @@
[short] skip
! go test .
stdout '^panic: testing: fuzz target must not return a value \[recovered\]$'
-- go.mod --
module test
go 1.18
-- x_test.go --
package test
import "testing"
func FuzzReturnErr(f *testing.F) {
f.Add("hello, validation!")
f.Fuzz(func(t *testing.T, in string) string {
return in
})
}

View File

@ -227,6 +227,9 @@ func (f *F) Fuzz(ff any) {
if fnType.NumIn() < 2 || fnType.In(0) != reflect.TypeOf((*T)(nil)) { if fnType.NumIn() < 2 || fnType.In(0) != reflect.TypeOf((*T)(nil)) {
panic("testing: fuzz target must receive at least two arguments, where the first argument is a *T") panic("testing: fuzz target must receive at least two arguments, where the first argument is a *T")
} }
if fnType.NumOut() != 0 {
panic("testing: fuzz target must not return a value")
}
// Save the types of the function to compare against the corpus. // Save the types of the function to compare against the corpus.
var types []reflect.Type var types []reflect.Type