Skip to content

Commit 9f4fb59

Browse files
committed
Add negative payload length test
1 parent 9213cc7 commit 9f4fb59

File tree

1 file changed

+45
-29
lines changed

1 file changed

+45
-29
lines changed

header_test.go

Lines changed: 45 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,57 @@ func randBool() bool {
1818
}
1919

2020
func TestHeader(t *testing.T) {
21-
22-
}
23-
24-
func TestFuzzHeader(t *testing.T) {
2521
t.Parallel()
22+
23+
t.Run("negative", func(t *testing.T) {
24+
t.Parallel()
2625

27-
for i := 0; i < 1000; i++ {
28-
h := header{
29-
fin: randBool(),
30-
rsv1: randBool(),
31-
rsv2: randBool(),
32-
rsv3: randBool(),
33-
opcode: opcode(rand.Intn(1 << 4)),
34-
35-
masked: randBool(),
36-
payloadLength: rand.Int63(),
37-
}
26+
b := marshalHeader(header{
27+
payloadLength: 1<<16 + 1,
28+
})
3829

39-
if h.masked {
40-
rand.Read(h.maskKey[:])
41-
}
30+
// Make length negative
31+
b[2] |= 1 << 7
4232

43-
b := marshalHeader(h)
4433
r := bytes.NewReader(b)
45-
h2, err := readHeader(r)
46-
if err != nil {
47-
t.Logf("header: %#v", h)
48-
t.Logf("bytes: %b", b)
49-
t.Fatalf("failed to read header: %v", err)
34+
_, err := readHeader(r)
35+
if err == nil {
36+
t.Fatalf("unexpected error value: %+v", err)
5037
}
38+
})
39+
t.Run("fuzz", func(t *testing.T) {
40+
t.Parallel()
41+
42+
for i := 0; i < 1000; i++ {
43+
h := header{
44+
fin: randBool(),
45+
rsv1: randBool(),
46+
rsv2: randBool(),
47+
rsv3: randBool(),
48+
opcode: opcode(rand.Intn(1 << 4)),
49+
50+
masked: randBool(),
51+
payloadLength: rand.Int63(),
52+
}
53+
54+
if h.masked {
55+
rand.Read(h.maskKey[:])
56+
}
57+
58+
b := marshalHeader(h)
59+
r := bytes.NewReader(b)
60+
h2, err := readHeader(r)
61+
if err != nil {
62+
t.Logf("header: %#v", h)
63+
t.Logf("bytes: %b", b)
64+
t.Fatalf("failed to read header: %v", err)
65+
}
5166

52-
if !cmp.Equal(h, h2, cmp.AllowUnexported(header{})) {
53-
t.Logf("header: %#v", h)
54-
t.Logf("bytes: %b", b)
55-
t.Fatalf("parsed and read header differ: %v", cmp.Diff(h, h2, cmp.AllowUnexported(header{})))
67+
if !cmp.Equal(h, h2, cmp.AllowUnexported(header{})) {
68+
t.Logf("header: %#v", h)
69+
t.Logf("bytes: %b", b)
70+
t.Fatalf("parsed and read header differ: %v", cmp.Diff(h, h2, cmp.AllowUnexported(header{})))
71+
}
5672
}
57-
}
73+
})
5874
}

0 commit comments

Comments
 (0)