diff --git a/header_test.go b/header_test.go index aefd98d62811fb4db1072580d5824504397f5575..f7db9f39d5b649fbfece2ff848f8a28357eb6337 100644 --- a/header_test.go +++ b/header_test.go @@ -18,41 +18,57 @@ func randBool() bool { } func TestHeader(t *testing.T) { - -} - -func TestFuzzHeader(t *testing.T) { t.Parallel() + + t.Run("negative", func(t *testing.T) { + t.Parallel() - for i := 0; i < 1000; i++ { - h := header{ - fin: randBool(), - rsv1: randBool(), - rsv2: randBool(), - rsv3: randBool(), - opcode: opcode(rand.Intn(1 << 4)), - - masked: randBool(), - payloadLength: rand.Int63(), - } + b := marshalHeader(header{ + payloadLength: 1<<16 + 1, + }) - if h.masked { - rand.Read(h.maskKey[:]) - } + // Make length negative + b[2] |= 1 << 7 - b := marshalHeader(h) r := bytes.NewReader(b) - h2, err := readHeader(r) - if err != nil { - t.Logf("header: %#v", h) - t.Logf("bytes: %b", b) - t.Fatalf("failed to read header: %v", err) + _, err := readHeader(r) + if err == nil { + t.Fatalf("unexpected error value: %+v", err) } + }) + t.Run("fuzz", func(t *testing.T) { + t.Parallel() + + for i := 0; i < 1000; i++ { + h := header{ + fin: randBool(), + rsv1: randBool(), + rsv2: randBool(), + rsv3: randBool(), + opcode: opcode(rand.Intn(1 << 4)), + + masked: randBool(), + payloadLength: rand.Int63(), + } + + if h.masked { + rand.Read(h.maskKey[:]) + } + + b := marshalHeader(h) + r := bytes.NewReader(b) + h2, err := readHeader(r) + if err != nil { + t.Logf("header: %#v", h) + t.Logf("bytes: %b", b) + t.Fatalf("failed to read header: %v", err) + } - if !cmp.Equal(h, h2, cmp.AllowUnexported(header{})) { - t.Logf("header: %#v", h) - t.Logf("bytes: %b", b) - t.Fatalf("parsed and read header differ: %v", cmp.Diff(h, h2, cmp.AllowUnexported(header{}))) + if !cmp.Equal(h, h2, cmp.AllowUnexported(header{})) { + t.Logf("header: %#v", h) + t.Logf("bytes: %b", b) + t.Fatalf("parsed and read header differ: %v", cmp.Diff(h, h2, cmp.AllowUnexported(header{}))) + } } - } + }) }