diff --git a/projects/goipp/README.md b/projects/goipp/README.md new file mode 100644 index 0000000..9b44242 --- /dev/null +++ b/projects/goipp/README.md @@ -0,0 +1,12 @@ +# Fuzzing Harness for goipp + +This directory contains fuzzers for the [`goipp`](https://github.com/OpenPrinting/goipp) project. + +## Fuzzer + +- `fuzz_decode_bytes.go`: Fuzzes the `DecodeBytes` function in `message.go`. +- `fuzz_decode_bytes_ex.go`: Fuzzes the `DecodeBytesEx` function in `message.go`. + +### TODO: + +- after successfully building and running the harnesses using oss-fuzz locally, update readme with instructions for the same \ No newline at end of file diff --git a/projects/goipp/fuzzer/fuzz_decode_bytes.go b/projects/goipp/fuzzer/fuzz_decode_bytes.go new file mode 100644 index 0000000..f316bab --- /dev/null +++ b/projects/goipp/fuzzer/fuzz_decode_bytes.go @@ -0,0 +1,20 @@ +/* + * Fuzz target for goipp's `DecodeBytes` function. + */ + + +package fuzzer + +import ( + "testing" + "github.com/OpenPrinting/goipp" +) + +func FuzzDecodeBytes(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte) { + var m goipp.Message + if err := m.DecodeBytes(data); err != nil { + t.Skip() + } + }) +} \ No newline at end of file diff --git a/projects/goipp/fuzzer/fuzz_decode_bytes_ex.go b/projects/goipp/fuzzer/fuzz_decode_bytes_ex.go new file mode 100644 index 0000000..a1ab333 --- /dev/null +++ b/projects/goipp/fuzzer/fuzz_decode_bytes_ex.go @@ -0,0 +1,26 @@ +/* + * Fuzz target for goipp's `DecodeBytesEx` function. + */ + + +package fuzzer + +import ( + "testing" + "github.com/OpenPrinting/goipp" +) + +func FuzzDecodeBytesEx(f *testing.F) { + f.Fuzz(func(t *testing.T, data []byte, enableWorkarounds bool) { + var m goipp.Message + opt := goipp.DecoderOptions{EnableWorkarounds: enableWorkarounds} + if err := m.DecodeBytesEx(data, opt); err != nil { + t.Skip() + } + + // Test message properties + if !m.Equal(m) { + t.Error("Message should be equal to itself") + } + }) +} \ No newline at end of file diff --git a/projects/goipp/oss_fuzz_build.sh b/projects/goipp/oss_fuzz_build.sh new file mode 100644 index 0000000..fbdbf73 --- /dev/null +++ b/projects/goipp/oss_fuzz_build.sh @@ -0,0 +1,26 @@ +#!/bin/bash -eu + +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/ + +# seed corpus for FuzzDecodeBytes +mkdir -p $WORK/fuzz_decode_bytes_corpus +cp $SRC/fuzzing/projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/* $WORK/fuzz_decode_bytes_corpus/ +cd $WORK +zip -r $OUT/fuzz_decode_bytes_seed_corpus.zip fuzz_decode_bytes_corpus/ + +# seed corpus for FuzzDecodeBytesEx +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/ + + +# build dependencies and fiuzzers +cd $SRC/goipp +go mod tidy +go install github.com/AdamKorcz/go-118-fuzz-build@latest +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 diff --git a/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/badmessage1.ipp b/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/badmessage1.ipp new file mode 100644 index 0000000..bcc8c7f Binary files /dev/null and b/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/badmessage1.ipp differ diff --git a/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage1.ipp b/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage1.ipp new file mode 100644 index 0000000..adbff08 Binary files /dev/null and b/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage1.ipp differ diff --git a/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage2.ipp b/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage2.ipp new file mode 100644 index 0000000..f07cc15 Binary files /dev/null and b/projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage2.ipp differ diff --git a/projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage1.ipp b/projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage1.ipp new file mode 100644 index 0000000..adbff08 Binary files /dev/null and b/projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage1.ipp differ diff --git a/projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage2.ipp b/projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage2.ipp new file mode 100644 index 0000000..f07cc15 Binary files /dev/null and b/projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage2.ipp differ