1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
package xerial
import (
"bytes"
"testing"
"github.com/klauspost/compress/internal/fuzz"
"github.com/klauspost/compress/s2"
)
func FuzzDecode(f *testing.F) {
fuzz.AddFromZip(f, "testdata/FuzzDecoder.zip", fuzz.TypeGoFuzz, false)
const limit = 1 << 20
dst := make([]byte, 0, limit)
f.Fuzz(func(t *testing.T, data []byte) {
got, _ := DecodeCapped(dst[:0], data)
if len(got) > cap(dst) {
t.Fatalf("cap exceeded: %d > %d", len(got), cap(dst))
}
})
}
func FuzzEncode(f *testing.F) {
fuzz.AddFromZip(f, "testdata/block-corpus-raw.zip", fuzz.TypeRaw, false)
f.Fuzz(func(t *testing.T, data []byte) {
encoded := Encode(make([]byte, 0, len(data)/2), data)
decoded, err := Decode(encoded)
if err != nil {
t.Errorf("input: %+v, encoded: %+v", data, encoded)
t.Fatal(err)
}
if !bytes.Equal(decoded, data) {
t.Fatal("mismatch")
}
encoded = EncodeBetter(make([]byte, 0, len(data)/2), data)
decoded, err = Decode(encoded)
if err != nil {
t.Errorf("input: %+v, encoded: %+v", data, encoded)
t.Fatal(err)
}
if !bytes.Equal(decoded, data) {
t.Fatal("mismatch")
}
encoded = s2.EncodeSnappy(make([]byte, 0, len(data)/2), data)
decoded, err = Decode(encoded)
if err != nil {
t.Errorf("input: %+v, encoded: %+v", data, encoded)
t.Fatal(err)
}
if !bytes.Equal(decoded, data) {
t.Fatal("mismatch")
}
})
}
|