summaryrefslogtreecommitdiff
path: root/vendor/github.com/pion/rtcp/fuzz.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pion/rtcp/fuzz.go')
-rw-r--r--vendor/github.com/pion/rtcp/fuzz.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/vendor/github.com/pion/rtcp/fuzz.go b/vendor/github.com/pion/rtcp/fuzz.go
new file mode 100644
index 0000000..2ea4fb1
--- /dev/null
+++ b/vendor/github.com/pion/rtcp/fuzz.go
@@ -0,0 +1,51 @@
+// +build gofuzz
+
+package rtcp
+
+import (
+ "bytes"
+ "io"
+)
+
+// Fuzz implements a randomized fuzz test of the rtcp
+// parser using go-fuzz.
+//
+// To run the fuzzer, first download go-fuzz:
+// `go get github.com/dvyukov/go-fuzz/...`
+//
+// Then build the testing package:
+// `go-fuzz-build github.com/pion/webrtc`
+//
+// And run the fuzzer on the corpus:
+// ```
+// mkdir workdir
+//
+// # optionally add a starter corpus of valid rtcp packets.
+// # the corpus should be as compact and diverse as possible.
+// cp -r ~/my-rtcp-packets workdir/corpus
+//
+// go-fuzz -bin=ase-fuzz.zip -workdir=workdir
+// ````
+func Fuzz(data []byte) int {
+ r := NewReader(bytes.NewReader(data))
+ for {
+ _, data, err := r.ReadPacket()
+ if err == io.EOF {
+ break
+ }
+ if err != nil {
+ return 0
+ }
+
+ packet, err := Unmarshal(data)
+ if err != nil {
+ return 0
+ }
+
+ if _, err := packet.Marshal(); err != nil {
+ return 0
+ }
+ }
+
+ return 1
+}