From b86e6c3d8288adedb497fc8968c89901a2b7350a Mon Sep 17 00:00:00 2001 From: mdimado Date: Sun, 1 Jun 2025 14:01:17 +0530 Subject: [PATCH] add FuzzAttributeUnpacking and its seed corpus --- .../goipp/fuzzer/fuzz_attribute_unpacking.go | 23 ++++++++++++++++++ projects/goipp/oss_fuzz_build.sh | 7 ++++++ .../attr_unpack_boolean_false.seed | Bin 0 -> 2 bytes .../attr_unpack_boolean_true.seed | 1 + .../attr_unpack_enum_negative.seed | 1 + .../attr_unpack_integer_123.seed | Bin 0 -> 5 bytes .../attr_unpack_range_negative.seed | Bin 0 -> 9 bytes .../attr_unpack_resolution_dpcm.seed | Bin 0 -> 10 bytes .../attr_unpack_resolution_dpi.seed | Bin 0 -> 10 bytes .../attr_unpack_string_hello.seed | 1 + .../attr_unpack_textlang_en.seed | Bin 0 -> 15 bytes .../attr_unpack_void_empty.seed | 1 + 12 files changed, 34 insertions(+) create mode 100644 projects/goipp/fuzzer/fuzz_attribute_unpacking.go create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_boolean_false.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_boolean_true.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_enum_negative.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_integer_123.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_range_negative.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_resolution_dpcm.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_resolution_dpi.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_string_hello.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_textlang_en.seed create mode 100644 projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_void_empty.seed diff --git a/projects/goipp/fuzzer/fuzz_attribute_unpacking.go b/projects/goipp/fuzzer/fuzz_attribute_unpacking.go new file mode 100644 index 0000000..77de869 --- /dev/null +++ b/projects/goipp/fuzzer/fuzz_attribute_unpacking.go @@ -0,0 +1,23 @@ +/* + * Fuzz target for goipp's attribute unpacking functionality. + */ +package fuzzer + +import ( + "strings" + "testing" + "github.com/OpenPrinting/goipp" +) + +func FuzzAttributeUnpacking(f *testing.F) { + f.Fuzz(func(t *testing.T, tag goipp.Tag, data []byte) { + attr := goipp.Attribute{Name: "test-attr"} + err := attr.unpack(tag, data) + // if unpack returns an error, ensure it mentions the tag in the message + if err != nil { + if !strings.Contains(err.Error(), tag.String()) { + t.Errorf("Error should contain tag information: %v", err) + } + } + }) +} \ No newline at end of file diff --git a/projects/goipp/oss_fuzz_build.sh b/projects/goipp/oss_fuzz_build.sh index acd4cc4..4173529 100644 --- a/projects/goipp/oss_fuzz_build.sh +++ b/projects/goipp/oss_fuzz_build.sh @@ -6,6 +6,7 @@ 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/ cp $SRC/fuzzing/projects/goipp/fuzzer/fuzz_collections.go $SRC/goipp/fuzzer/ cp $SRC/fuzzing/projects/goipp/fuzzer/fuzz_tag_extension.go $SRC/goipp/fuzzer/ +cp $SRC/fuzzing/projects/goipp/fuzzer/fuzz_attribute_unpacking.go $SRC/goipp/fuzzer/ # new fuzz target # Corpus for fuzzers that accept good AND bad messages mkdir -p $WORK/good_and_bad_ipp_messages_seed_corpus @@ -25,6 +26,11 @@ mkdir -p $WORK/extension_tags_seed_corpus cp $SRC/fuzzing/projects/goipp/seeds/extension_tags_seed_corpus/* $WORK/extension_tags_seed_corpus/ zip -r $OUT/fuzz_tag_extension_seed_corpus.zip extension_tags_seed_corpus/ +# Corpus for attribute unpacking seeds +mkdir -p $WORK/attr_unpack_seed_corpus +cp $SRC/fuzzing/projects/goipp/seeds/attr_unpack_seed_corpus/* $WORK/attr_unpack_seed_corpus/ +zip -r $OUT/fuzz_attribute_unpacking_seed_corpus.zip attr_unpack_seed_corpus/ + # build dependencies and fuzzers cd $SRC/goipp go mod tidy @@ -36,3 +42,4 @@ compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzDecodeBytesEx compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzRoundTrip fuzz_round_trip compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzCollections fuzz_collections compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzTagExtension fuzz_tag_extension +compile_native_go_fuzzer github.com/OpenPrinting/goipp/fuzzer FuzzAttributeUnpacking fuzz_attribute_unpacking # new fuzzer diff --git a/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_boolean_false.seed b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_boolean_false.seed new file mode 100644 index 0000000000000000000000000000000000000000..7d6519130e7a5ca2587ef3d03fc13381a85fa8b9 GIT binary patch literal 2 JcmY#l0000+03!eZ literal 0 HcmV?d00001 diff --git a/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_boolean_true.seed b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_boolean_true.seed new file mode 100644 index 0000000..5541078 --- /dev/null +++ b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_boolean_true.seed @@ -0,0 +1 @@ +" \ No newline at end of file diff --git a/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_enum_negative.seed b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_enum_negative.seed new file mode 100644 index 0000000..2328040 --- /dev/null +++ b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_enum_negative.seed @@ -0,0 +1 @@ +#ÿÿþ¿ \ No newline at end of file diff --git a/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_integer_123.seed b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_integer_123.seed new file mode 100644 index 0000000000000000000000000000000000000000..b1bf5493175a0593025d27b2314ee89a63561ed2 GIT binary patch literal 5 McmY#nU|^^Q00AWcod5s; literal 0 HcmV?d00001 diff --git a/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_range_negative.seed b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_range_negative.seed new file mode 100644 index 0000000000000000000000000000000000000000..f4413909e1be638d915068dcb72f43d0dae6cf5c GIT binary patch literal 9 QcmXs1|Ns9S1_p)`02-47l>h($ literal 0 HcmV?d00001 diff --git a/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_resolution_dpcm.seed b/projects/goipp/seeds/attr_unpack_seed_corpus/attr_unpack_resolution_dpcm.seed new file mode 100644 index 0000000000000000000000000000000000000000..fb593d0cfd009df9622c5d09e797b84d667b93fa GIT binary patch literal 10 PcmXqFU|>iA;u9