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{})))
+			}
 		}
-	}
+	})
 }