-
Notifications
You must be signed in to change notification settings - Fork 18.8k
Description
What version of Go are you using (go version)?
$ go version go version go1.18rc1 freebsd/amd64
Does this issue reproduce with the latest release?
Only relevant for Go1.18 beta and rc. Both beta2 and rc1 reproduce this.
What operating system and processor architecture are you using (go env)?
go env Output
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/dchapes/go/go-build-cache" GOENV="/home/dchapes/.config/go/env" GOEXE="" GOEXPERIMENT="" GOFLAGS="-trimpath" GOHOSTARCH="amd64" GOHOSTOS="freebsd" GOINSECURE="" GOMODCACHE="/home/dchapes/go/pkg/mod" GONOPROXY="" GONOSUMDB="github.com/dchapes,hg.sr.ht/~dchapes" GOOS="freebsd" GOPATH="/home/dchapes/go" GOPRIVATE="" GOPROXY="" GOROOT="/home/dchapes/sdk/go1.18rc1" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/home/dchapes/sdk/go1.18rc1/pkg/tool/freebsd_amd64" GOVCS="" GOVERSION="go1.18rc1" GCCGO="gccgo" GOAMD64="v3" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="/home/dchapes/go/src/dave-test/fuzz_float/go.mod" GOWORK="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build2272238524=/tmp/go-build -gno-record-gcc-switches"
What did you do?
package fuzz_float
import (
"math"
"testing"
)
func FuzzFloat(f *testing.F) {
f.Add(math.Inf(1))
f.Fuzz(func(t *testing.T, f float64) {
f = f + f
})
}
$ go test -fuzz=. -fuzztime=10s
fuzz: elapsed: 0s, gathering baseline coverage: 0/2 completed
fuzz: elapsed: 0s, gathering baseline coverage: 1/2 completed
--- FAIL: FuzzFloat (0.01s)
malformed line "float64(+Inf)": expected operation on int or float type
FAIL
exit status 1
FAIL dave-test/fuzz_float 0.010s
Exit 1
Note: I had this happen with an actual Fuzz function I was writing that took (float64, int, int) and using f.Add(math.MaxFloat64, 0, 0). In that case it took a few fuzzing runs for the error to appear. That code being fuzzed does handle ±Inf specially so fuzzing would find those inputs interesting.
What did you expect to see?
Fuzzing to work and not create corpus files it can't parse.
What did you see instead?
The above error. In the included code since f.Add is used to add +Inf no bad corpus file is written, but in my actual use case I eventually got a corpus file
in ~/go/go-build-cache/fuzz/…/FuzzFormat/1b137f1e2faea57dd1c14f1c8ffc4bcf7e67ec00693d5f5e7f57ef840a50174a with:
go test fuzz v1 float64(+Inf) int(-33) int(82)
Which causes go fuzz to produce the error every time no matter what f.Add calls are then used. Deleting the "bad" corpus file and excluding any f.Add lines with large/infinite values allows go fuzz to run okay until/unless it tries another +Inf.
Edit: I've also seen:
malformed line "float64(NaN)": literal value required for primitive type
Metadata
Metadata
Assignees
Labels
Type
Projects
Status