From 3f45566e7460acf21f3d8367da2861a6a61fa504 Mon Sep 17 00:00:00 2001 From: mdimado Date: Wed, 28 May 2025 14:46:17 +0530 Subject: [PATCH] init integration for goipp --- projects/goipp/README.md | 12 ++++++++ projects/goipp/fuzzer/fuzz_decode_bytes.go | 20 ++++++++++++++ projects/goipp/fuzzer/fuzz_decode_bytes_ex.go | 26 ++++++++++++++++++ projects/goipp/oss_fuzz_build.sh | 26 ++++++++++++++++++ .../badmessage1.ipp | Bin 0 -> 196 bytes .../goodMessage1.ipp | Bin 0 -> 398 bytes .../goodMessage2.ipp | Bin 0 -> 63 bytes .../goodMessage1.ipp | Bin 0 -> 398 bytes .../goodMessage2.ipp | Bin 0 -> 63 bytes 9 files changed, 84 insertions(+) create mode 100644 projects/goipp/README.md create mode 100644 projects/goipp/fuzzer/fuzz_decode_bytes.go create mode 100644 projects/goipp/fuzzer/fuzz_decode_bytes_ex.go create mode 100644 projects/goipp/oss_fuzz_build.sh create mode 100644 projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/badmessage1.ipp create mode 100644 projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage1.ipp create mode 100644 projects/goipp/seeds/fuzz_decode_bytes_ex_seed_corpus/goodMessage2.ipp create mode 100644 projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage1.ipp create mode 100644 projects/goipp/seeds/fuzz_decode_bytes_seed_corpus/goodMessage2.ipp 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 0000000000000000000000000000000000000000..bcc8c7f2ce7cc01ef9f9f7359295fed0395f6463 GIT binary patch literal 196 zcmY+8y9&ZU5JhjI7Mjjh8^LzjCZO1het_7I$s`%r?1p`S`t=62(B{H9r@2{%96*+x zu%sBh+*0JAs*Zf%h*^q_+MludX_jL0WRxM>CTbZu+arp>i;e76@`AMt!$E7~Dl(l5 yQGa95jdOX4dC#?ws+<8zEIt(E$-oB1UDeXF4dN`Oz~wr+$G_{hyYV&NGkF2Js5kBa literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..adbff08cae3c111c3df2ff3d577fd441f9a07908 GIT binary patch literal 398 zcma)$L2JT55QQgEi<+C)_EPY=J^rwX*lJt17uB6WE&9)*AzSe0IlK z^DC&A>!CKhwtm;uPCC-vhBS^kf8sQ<>1)H}KQZ2?4=`l>5TlJ^rwX*lJt17uB6WE&9)*AzSe0IlK z^DC&A>!CKhwtm;uPCC-vhBS^kf8sQ<>1)H}KQZ2?4=`l>5Tl