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