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