aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2022-02-16 10:52:01 -0500
committerBryan Mills <bcmills@google.com>2022-02-16 16:06:39 +0000
commitf985833dec19b0147db3c5c33d3bf0181891d458 (patch)
tree73ea1d2b66e8867fc7efeb355a4f581ce1b4f2e4
parent5d8d3878496918d51347422d651629975343b18e (diff)
downloadgo-f985833dec19b0147db3c5c33d3bf0181891d458.tar.gz
go-f985833dec19b0147db3c5c33d3bf0181891d458.zip
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>
-rw-r--r--src/cmd/go/testdata/script/test_fuzz_return.txt19
-rw-r--r--src/testing/fuzz.go3
2 files changed, 22 insertions, 0 deletions
diff --git a/src/cmd/go/testdata/script/test_fuzz_return.txt b/src/cmd/go/testdata/script/test_fuzz_return.txt
new file mode 100644
index 0000000000..63275aad01
--- /dev/null
+++ b/src/cmd/go/testdata/script/test_fuzz_return.txt
@@ -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
+ })
+}
diff --git a/src/testing/fuzz.go b/src/testing/fuzz.go
index e1d7544f7a..b5e1339deb 100644
--- a/src/testing/fuzz.go
+++ b/src/testing/fuzz.go
@@ -227,6 +227,9 @@ func (f *F) Fuzz(ff any) {
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")
}
+ if fnType.NumOut() != 0 {
+ panic("testing: fuzz target must not return a value")
+ }
// Save the types of the function to compare against the corpus.
var types []reflect.Type