-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathio_fuzz_test.go
74 lines (65 loc) · 1.77 KB
/
io_fuzz_test.go
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Copyright 2023 the Blobloom authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//go:build go1.18
// +build go1.18
package blobloom
import (
"bytes"
"io"
"strings"
"testing"
)
func FuzzLoader(f *testing.F) {
const validHeader = "blobloom\x00\x00\x00\x00" +
"\x00\x00\x00\x00\x00\x00\x00\x02" + // one block, two hashes
"this is a valid zero-padded UTF-8 comment\x00\x00\x00"
var zeroblock [64]byte
f.Add(zeroblock[:])
f.Add([]byte(validHeader + string(zeroblock[:])))
f.Fuzz(func(t *testing.T, p []byte) {
r := bytes.NewReader(p)
l, err := NewLoader(r)
switch {
case err != nil:
if l != nil {
t.Error("l should be nil when err != nil")
}
return
case l.nblocks == 0:
t.Fatal("l.nblocks == 0")
case l.nhashes == 0:
t.Fatal("l.nhashes == 0")
case strings.IndexByte(l.Comment, 0) != -1:
t.Fatal("zero in comment")
}
// Prevent large allocations.
const maxMem = 1 << 20
if l.nblocks > maxMem/(BlockBits/8) {
t.Skip()
}
f, err := l.Load(nil)
if err == nil {
if f == nil {
t.Error("err == nil and f == nil")
}
} else {
if f != nil {
t.Error("f != nil and err != nil")
}
if err != io.ErrUnexpectedEOF && !strings.HasPrefix(err.Error(), "blobloom: ") {
t.Fatal("unexpected error", err)
}
}
})
}