@@ -18,41 +18,57 @@ func randBool() bool {
18
18
}
19
19
20
20
func TestHeader (t * testing.T ) {
21
-
22
- }
23
-
24
- func TestFuzzHeader (t * testing.T ) {
25
21
t .Parallel ()
22
+
23
+ t .Run ("negative" , func (t * testing.T ) {
24
+ t .Parallel ()
26
25
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
+ })
38
29
39
- if h .masked {
40
- rand .Read (h .maskKey [:])
41
- }
30
+ // Make length negative
31
+ b [2 ] |= 1 << 7
42
32
43
- b := marshalHeader (h )
44
33
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 )
50
37
}
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
+ }
51
66
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
+ }
56
72
}
57
- }
73
+ })
58
74
}
0 commit comments