From 91a6a12dbeea3169ed03355a3203e6af9a589ded Mon Sep 17 00:00:00 2001 From: Catena cyber <35799796+catenacyber@users.noreply.github.com> Date: Sun, 22 Nov 2020 20:05:32 +0100 Subject: [PATCH] Go json coverage (#4689) * Good fuzz target for golang coverage with modules * Place target in right directory for go-json-iterator So that coverage gets access to the right package --- infra/base-images/base-builder/compile_go_fuzzer | 8 +++++++- projects/go-json-iterator/Dockerfile | 4 +--- projects/go-json-iterator/build.sh | 3 +-- projects/go-json-iterator/fuzz_json.go | 13 ++++++------- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/infra/base-images/base-builder/compile_go_fuzzer b/infra/base-images/base-builder/compile_go_fuzzer index 0abd2c07e..925a29ec0 100755 --- a/infra/base-images/base-builder/compile_go_fuzzer +++ b/infra/base-images/base-builder/compile_go_fuzzer @@ -38,7 +38,13 @@ if [[ $SANITIZER = *coverage* ]]; then sed -i -e 's/TestFuzzCorpus/Test'$function'Corpus/' ./"${function,,}"_test.go echo "#/bin/sh" > $OUT/$fuzzer - echo "cd $path" >> $OUT/$fuzzer + if [[ ${GO111MODULE:-} = on ]]; then + echo "export GO111MODULE=on" >> $OUT/$fuzzer + echo "cd ../pkg/mod/"`go list -m $basemod | sed 's/ /@/'` >> $OUT/$fuzzer + echo "cd ./"`echo $path | cut -d/ -f4-` >> $OUT/$fuzzer + else + echo "cd $path" >> $OUT/$fuzzer + fi echo "go test -run Test${function}Corpus -v $tags -coverprofile \$1 " >> $OUT/$fuzzer chmod +x $OUT/$fuzzer diff --git a/projects/go-json-iterator/Dockerfile b/projects/go-json-iterator/Dockerfile index bcbb635f8..3d6a90c56 100644 --- a/projects/go-json-iterator/Dockerfile +++ b/projects/go-json-iterator/Dockerfile @@ -17,7 +17,5 @@ FROM gcr.io/oss-fuzz-base/base-builder RUN go get github.com/json-iterator/go -RUN mkdir fuzz -COPY fuzz_json.go fuzz +COPY fuzz_json.go $GOPATH/src/github.com/json-iterator/go/ COPY build.sh $SRC/ -WORKDIR fuzz diff --git a/projects/go-json-iterator/build.sh b/projects/go-json-iterator/build.sh index 060bb7c76..f247b2422 100755 --- a/projects/go-json-iterator/build.sh +++ b/projects/go-json-iterator/build.sh @@ -16,5 +16,4 @@ ################################################################################ - -compile_go_fuzzer . Fuzz fuzz_json +compile_go_fuzzer github.com/json-iterator/go Fuzz fuzz_json diff --git a/projects/go-json-iterator/fuzz_json.go b/projects/go-json-iterator/fuzz_json.go index c057a63bf..e5236be2e 100644 --- a/projects/go-json-iterator/fuzz_json.go +++ b/projects/go-json-iterator/fuzz_json.go @@ -2,12 +2,11 @@ // Use of this source code is governed by Apache 2 LICENSE. // Modified from original file https://github.com/dvyukov/go-fuzz-corpus/blob/master/json/json.go -package jsonfuzz +package jsoniter import ( "encoding/json" "fmt" - jsoniter "github.com/json-iterator/go" "reflect" ) @@ -21,7 +20,7 @@ func Fuzz(data []byte) int { func() interface{} { return new(S) }, } { v := ctor() - if jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(data, v) != nil { + if ConfigCompatibleWithStandardLibrary.Unmarshal(data, v) != nil { continue } score = 1 @@ -36,12 +35,12 @@ func Fuzz(data []byte) int { panic("not equal") } - data1, err := jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(v) + data1, err := ConfigCompatibleWithStandardLibrary.Marshal(v) if err != nil { panic(err) } v1 := ctor() - if jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(data1, v1) != nil { + if ConfigCompatibleWithStandardLibrary.Unmarshal(data1, v1) != nil { continue } if !reflect.DeepEqual(v, v1) { @@ -85,9 +84,9 @@ type Marshaller struct { } func (m *Marshaller) MarshalJSON() ([]byte, error) { - return jsoniter.ConfigCompatibleWithStandardLibrary.Marshal(m.v) + return ConfigCompatibleWithStandardLibrary.Marshal(m.v) } func (m *Marshaller) UnmarshalJSON(data []byte) error { - return jsoniter.ConfigCompatibleWithStandardLibrary.Unmarshal(data, &m.v) + return ConfigCompatibleWithStandardLibrary.Unmarshal(data, &m.v) }