-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathpacket_fuzz_test.go
More file actions
37 lines (34 loc) · 968 Bytes
/
packet_fuzz_test.go
File metadata and controls
37 lines (34 loc) · 968 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package gopus
import "testing"
func FuzzParsePacket_NoPanic(f *testing.F) {
f.Add([]byte{0xF8, 0x11, 0x22, 0x33})
f.Add([]byte{0x00, 0x10})
f.Add([]byte{0x03, 0x02, 0x10, 0x20})
f.Fuzz(func(t *testing.T, data []byte) {
if len(data) == 0 {
return
}
info, err := ParsePacket(data)
_ = ParseTOC(data[0])
if err != nil {
return
}
if info.FrameCount < 1 || info.FrameCount > 48 {
t.Fatalf("invalid frame count: %d", info.FrameCount)
}
if len(info.FrameSizes) != info.FrameCount {
t.Fatalf("frame size metadata mismatch: count=%d sizes=%d", info.FrameCount, len(info.FrameSizes))
}
total := 0
for i, n := range info.FrameSizes {
// Zero-length frames are valid in some packet layouts; only negatives are invalid.
if n < 0 {
t.Fatalf("invalid negative frame size[%d]=%d", i, n)
}
total += n
}
if total > len(data)-1 {
t.Fatalf("frame bytes exceed payload: frames=%d payload=%d", total, len(data)-1)
}
})
}