fuzz.go 921 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. // +build gofuzz
  2. package rtcp
  3. import (
  4. "bytes"
  5. "io"
  6. )
  7. // Fuzz implements a randomized fuzz test of the rtcp
  8. // parser using go-fuzz.
  9. //
  10. // To run the fuzzer, first download go-fuzz:
  11. // `go get github.com/dvyukov/go-fuzz/...`
  12. //
  13. // Then build the testing package:
  14. // `go-fuzz-build github.com/pion/webrtc`
  15. //
  16. // And run the fuzzer on the corpus:
  17. // ```
  18. // mkdir workdir
  19. //
  20. // # optionally add a starter corpus of valid rtcp packets.
  21. // # the corpus should be as compact and diverse as possible.
  22. // cp -r ~/my-rtcp-packets workdir/corpus
  23. //
  24. // go-fuzz -bin=ase-fuzz.zip -workdir=workdir
  25. // ````
  26. func Fuzz(data []byte) int {
  27. r := NewReader(bytes.NewReader(data))
  28. for {
  29. _, data, err := r.ReadPacket()
  30. if err == io.EOF {
  31. break
  32. }
  33. if err != nil {
  34. return 0
  35. }
  36. packet, err := Unmarshal(data)
  37. if err != nil {
  38. return 0
  39. }
  40. if _, err := packet.Marshal(); err != nil {
  41. return 0
  42. }
  43. }
  44. return 1
  45. }