mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			51 lines
		
	
	
	
		
			921 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
	
		
			921 B
		
	
	
	
		
			Go
		
	
	
	
	
	
| // +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
 | |
| }
 |