diff --git a/projects/goipp/fuzzer/fuzz_round_trip.go b/projects/goipp/fuzzer/fuzz_round_trip.go new file mode 100644 index 0000000..25a6a42 --- /dev/null +++ b/projects/goipp/fuzzer/fuzz_round_trip.go @@ -0,0 +1,30 @@ +/* + * Fuzz target for goipp's EncodeBytes + DecodeBytes round-trip consistency. + */ +package fuzzer + +import ( + "testing" + + "github.com/OpenPrinting/goipp" +) + +func FuzzRoundTrip(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + var m goipp.Message + if err := m.DecodeBytes(data); err != nil { + t.Skip() + } + + encoded, err := m.EncodeBytes() + if err != nil { + t.Errorf("Failed to encode: %v", err) + return + } + + var m2 goipp.Message + if err := m2.DecodeBytes(encoded); err != nil { + t.Errorf("Failed to decode re-encoded: %v", err) + } + }) +} diff --git a/projects/goipp/oss_fuzz_build.sh b/projects/goipp/oss_fuzz_build.sh index fbdbf73..694309a 100644 --- a/projects/goipp/oss_fuzz_build.sh +++ b/projects/goipp/oss_fuzz_build.sh @@ -3,6 +3,7 @@ mkdir -p $SRC/goipp/fuzzer cp $SRC/fuzzing/projects/goipp/fuzzer/fuzz_decode_bytes.go $SRC/goipp/fuzzer/ cp $SRC/fuzzing/projects/goipp/fuzzer/fuzz_decode_bytes_ex.go $SRC/goipp/fuzzer/ +cp $SRC/fuzzing/projects/goipp/fuzzer/fuzz_round_trip.go $SRC/goipp/fuzzer/ # seed corpus for FuzzDecodeBytes mkdir -p $WORK/fuzz_decode_bytes_corpus @@ -15,6 +16,11 @@ mkdir -p $WORK/fuzz_decode_bytes_ex_corpus cp $SRC/fuzzing/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/* $WORK/fuzz_decode_bytes_ex_corpus/ zip -r $OUT/fuzz_decode_bytes_ex_seed_corpus.zip fuzz_decode_bytes_ex_corpus/ +# seed corpus for FuzzRoundTrip +mkdir -p $WORK/fuzz_round_trip_corpus +cp $SRC/fuzzing/projects/goipp/seeds/fuzz_round_trip_seed_corpus/* $WORK/fuzz_round_trip_corpus/ +zip -r $OUT/fuzz_round_trip_seed_corpus.zip fuzz_round_trip_corpus/ + # build dependencies and fiuzzers cd $SRC/goipp @@ -24,3 +30,4 @@ go get github.com/AdamKorcz/go-118-fuzz-build/testing compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzDecodeBytes fuzz_decode_bytes compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzDecodeBytesEx fuzz_decode_bytes_ex +compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzRoundTrip fuzz_round_trip \ No newline at end of file diff --git a/projects/goipp/seeds/fuzz_round_trip_seed_corpus/goodMessage1.ipp b/projects/goipp/seeds/fuzz_round_trip_seed_corpus/goodMessage1.ipp new file mode 100644 index 0000000..adbff08 Binary files /dev/null and b/projects/goipp/seeds/fuzz_round_trip_seed_corpus/goodMessage1.ipp differ diff --git a/projects/goipp/seeds/fuzz_round_trip_seed_corpus/goodMessage2.ipp b/projects/goipp/seeds/fuzz_round_trip_seed_corpus/goodMessage2.ipp new file mode 100644 index 0000000..f07cc15 Binary files /dev/null and b/projects/goipp/seeds/fuzz_round_trip_seed_corpus/goodMessage2.ipp differ