37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
package gateway
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func FuzzApolloENetAndRTSPParsersStayBounded(f *testing.F) {
|
|
server, err := net.ListenUDP("udp", &net.UDPAddr{IP: net.ParseIP("127.0.0.1")})
|
|
if err != nil {
|
|
f.Fatal(err)
|
|
}
|
|
defer server.Close()
|
|
client, err := net.DialUDP("udp", nil, server.LocalAddr().(*net.UDPAddr))
|
|
if err != nil {
|
|
f.Fatal(err)
|
|
}
|
|
defer client.Close()
|
|
f.Add([]byte{0x80, 0x01, 0, 0, apolloENetPing | apolloENetAcknowledged, 0, 0, 1})
|
|
f.Add([]byte("RTSP/1.0 200 OK\r\nCSeq: 1\r\n\r\n"))
|
|
f.Fuzz(func(t *testing.T, data []byte) {
|
|
if len(data) > apolloENetMaximumPacket+1 {
|
|
data = data[:apolloENetMaximumPacket+1]
|
|
}
|
|
peer := &apolloENetPeer{
|
|
conn: client, now: time.Now, state: apolloENetConnected, peerID: 1, inboundSession: 0,
|
|
pending: make(map[apolloENetPendingKey]*apolloENetPending), rtt: time.Millisecond, variance: time.Millisecond,
|
|
}
|
|
_ = peer.handleDatagram(data)
|
|
_, _ = parseApolloRTSPMessage(data)
|
|
_, _ = ParseRTSPResponse(data)
|
|
_ = validateApolloDescribe(apolloRTSPMessage{headers: map[string]string{"content-type": "application/sdp"}, body: data})
|
|
_, _ = parseApolloRTP(data)
|
|
})
|
|
}
|