Fuzzing Coverage Expansion (#866)

* New fuzzers and corpora were added
diff --git a/huff0/fuzz_test.go b/huff0/fuzz_test.go
new file mode 100644
index 0000000..fabb12e
--- /dev/null
+++ b/huff0/fuzz_test.go
@@ -0,0 +1,90 @@
+package huff0
+
+import (
+	"bytes"
+	"fmt"
+	"testing"
+
+	"github.com/klauspost/compress/internal/fuzz"
+)
+
+func FuzzCompress(f *testing.F) {
+	fuzz.AddFromZip(f, "testdata/fse_compress.zip", fuzz.TypeRaw, false)
+	f.Fuzz(func(t *testing.T, buf0 []byte) {
+		//use of Compress1X
+		var s Scratch
+		if len(buf0) > BlockSizeMax {
+			buf0 = buf0[:BlockSizeMax]
+		}
+		EstimateSizes(buf0, &s)
+		b, re, err := Compress1X(buf0, &s)
+		s.validateTable(s.cTable)
+		s.canUseTable(s.cTable)
+		if err != nil || b == nil {
+			return
+		}
+
+		min := s.minSize(len(buf0))
+
+		if len(s.OutData) < min {
+			t.Errorf("FuzzCompress: output data length (%d) below shannon limit (%d)", len(s.OutData), min)
+		}
+		if len(s.OutTable) == 0 {
+			t.Error("FuzzCompress: got no table definition")
+		}
+		if re {
+			t.Error("FuzzCompress: claimed to have re-used.")
+		}
+		if len(s.OutData) == 0 {
+			t.Error("FuzzCompress: got no data output")
+		}
+
+		dec, remain, err := ReadTable(b, nil)
+
+		//use of Decompress1X
+		out, err := dec.Decompress1X(remain)
+		if err != nil || len(out) == 0 {
+			return
+		}
+		if !bytes.Equal(out, buf0) {
+			t.Fatal(fmt.Sprintln("FuzzCompressX1 output mismatch\n", len(out), "org: \n", len(buf0)))
+		}
+
+		//use of Compress4X
+		s.Reuse = ReusePolicyAllow
+		b, reUsed, err := Compress4X(buf0, &s)
+		if err != nil || b == nil {
+			return
+		}
+		remain = b
+		if !reUsed {
+			dec, remain, err = ReadTable(b, dec)
+			if err != nil {
+				return
+			}
+		}
+		//use of Decompress4X
+		out, err = dec.Decompress4X(remain, len(buf0))
+		if err != nil || out == nil {
+			return
+		}
+		if !bytes.Equal(out, buf0) {
+			t.Fatal(fmt.Sprintln("FuzzCompressX4 output mismatch: ", len(out), ", org: ", len(buf0)))
+		}
+	})
+}
+
+func FuzzDecompress1x(f *testing.F) {
+	fuzz.AddFromZip(f, "testdata/huff0_decompress1x.zip", fuzz.TypeRaw, false)
+	f.Fuzz(func(t *testing.T, buf0 []byte) {
+		var s Scratch
+		_, remain, err := ReadTable(buf0, &s)
+		if err != nil {
+			return
+		}
+		out, err := s.Decompress1X(remain)
+		if err != nil || out == nil {
+			return
+		}
+	})
+}