@@ -18,41 +18,57 @@ func randBool() bool {
1818}
1919
2020func 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