diff --git a/bundle_test.go b/bundle_test.go index 44e033a..22a4790 100644 --- a/bundle_test.go +++ b/bundle_test.go @@ -210,3 +210,31 @@ func TestBadOSCBundleDecoding(t *testing.T) { }) } } + +func FuzzBundleFromBytes(f *testing.F) { + seedBytes := [][]byte{ + {}, + {35, 98, 117, 110, 100, 108, 101, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 0, 0, 0, 32, 47, 111, + 115, 99, 105, 108, 108, 97, 116, 111, 114, 47, 52, + 47, 102, 114, 101, 113, 117, 101, 110, 99, 121, 0, + 44, 102, 0, 0, 67, 220, 0, 0}, + {35, 98, 117, 110, 100, 108, 101, 0, // #bundle + 0, 0, 0, 32, 0, 0, 0, 0, // time tag + 0, 0, 0, 52, // content size + 35, 98, 117, 110, 100, 108, 101, 0, // #bundle + 0, 0, 0, 64, 0, 0, 0, 0, // time tag + 0, 0, 0, 32, // content size + 47, 111, 115, 99, 105, 108, 108, 97, 116, 111, 114, 47, 52, + 47, 102, 114, 101, 113, 117, 101, 110, 99, 121, 0, + 44, 102, 0, 0, 67, 220, 0, 0}, + } + + for _, seed := range seedBytes { + f.Add(seed) + } + + f.Fuzz(func(t *testing.T, data []byte) { + _, _, _ = BundleFromBytes(data) + }) +} diff --git a/message_test.go b/message_test.go index 1ffb987..de1d1f4 100644 --- a/message_test.go +++ b/message_test.go @@ -511,3 +511,46 @@ func TestBadOSCMessageDecoding(t *testing.T) { }) } } + +func BenchmarkMessageToBytes(b *testing.B) { + message := &OSCMessage{ + Address: "/hello", + Args: []OSCArg{ + {Type: "i", Value: 35}, + }, + } + + for b.Loop() { + _, err := message.ToBytes() + if err != nil { + b.Fatalf("failed to encode properly: %s", err.Error()) + } + } +} + +func BenchmarkMessageFromBytes(b *testing.B) { + bytes := []byte{47, 104, 101, 108, 108, 111, 0, 0, 44, 105, 0, 0, 0, 0, 0, 35} + + for b.Loop() { + _, err := MessageFromBytes(bytes) + if err != nil { + b.Fatalf("failed to decode properly: %s", err.Error()) + } + } +} + +func FuzzMessageFromBytes(f *testing.F) { + seedBytes := [][]byte{ + {}, + {47, 104, 101, 108, 108, 111, 0, 0}, + {47, 104, 101, 108, 108, 111, 0, 0, 44, 105, 0, 0, 0, 0, 0, 35}, + } + + for _, seed := range seedBytes { + f.Add(seed) + } + + f.Fuzz(func(t *testing.T, data []byte) { + _, _ = MessageFromBytes(data) + }) +} diff --git a/testdata/fuzz/FuzzBundleFromBytes/39e8ac474312e7e0 b/testdata/fuzz/FuzzBundleFromBytes/39e8ac474312e7e0 new file mode 100644 index 0000000..bbb5aaa --- /dev/null +++ b/testdata/fuzz/FuzzBundleFromBytes/39e8ac474312e7e0 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("#bundle\x0000000000\x00\x00\x00\x00") diff --git a/testdata/fuzz/FuzzMessageFromBytes/986355228ada9f19 b/testdata/fuzz/FuzzMessageFromBytes/986355228ada9f19 new file mode 100644 index 0000000..64a437e --- /dev/null +++ b/testdata/fuzz/FuzzMessageFromBytes/986355228ada9f19 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("/00\x00,b0\x00\xff000") diff --git a/testdata/fuzz/FuzzMessageFromBytes/b52972290d937e09 b/testdata/fuzz/FuzzMessageFromBytes/b52972290d937e09 new file mode 100644 index 0000000..f4f8a05 --- /dev/null +++ b/testdata/fuzz/FuzzMessageFromBytes/b52972290d937e09 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("/00\x00,b0\x00\x00\x00\x00\x010") diff --git a/testdata/fuzz/FuzzMessageFromBytes/c9b3b4e809eeacd2 b/testdata/fuzz/FuzzMessageFromBytes/c9b3b4e809eeacd2 new file mode 100644 index 0000000..510efb5 --- /dev/null +++ b/testdata/fuzz/FuzzMessageFromBytes/c9b3b4e809eeacd2 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("/00\x00,d\x0000000")