bencode/fuzz.go | 30 ------------------------------ bencode/fuzz_test.go | 26 ++++++++++++++++++++++++++ metainfo/fuzz.go | 29 ----------------------------- metainfo/fuzz_test.go | 46 ++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/bencode/fuzz.go b/bencode/fuzz.go deleted file mode 100644 index 7606a8ccbe5e8e0d421d83a9a952582efc8d7126..0000000000000000000000000000000000000000 --- a/bencode/fuzz.go +++ /dev/null @@ -1,30 +0,0 @@ -//go:build gofuzz -// +build gofuzz - -package bencode - -import ( - "fmt" - "reflect" -) - -func Fuzz(b []byte) int { - var d interface{} - err := Unmarshal(b, &d) - if err != nil { - return 0 - } - b0, err := Marshal(d) - if err != nil { - panic(err) - } - var d0 interface{} - err = Unmarshal(b0, &d0) - if err != nil { - panic(err) - } - if !reflect.DeepEqual(d, d0) { - panic(fmt.Sprintf("%s != %s", d, d0)) - } - return 1 -} diff --git a/bencode/fuzz_test.go b/bencode/fuzz_test.go new file mode 100644 index 0000000000000000000000000000000000000000..57c18eed188c7e597381b14181e447f4aff02b2e --- /dev/null +++ b/bencode/fuzz_test.go @@ -0,0 +1,26 @@ +//go:build go1.18 + +package bencode + +import ( + "testing" + + qt "github.com/frankban/quicktest" +) + +func Fuzz(f *testing.F) { + f.Fuzz(func(t *testing.T, b []byte) { + c := qt.New(t) + var d interface{} + err := Unmarshal(b, &d) + if err != nil { + t.Skip() + } + b0, err := Marshal(d) + c.Assert(err, qt.IsNil) + var d0 interface{} + err = Unmarshal(b0, &d0) + c.Assert(err, qt.IsNil) + c.Assert(d0, qt.DeepEquals, d) + }) +} diff --git a/metainfo/fuzz.go b/metainfo/fuzz.go deleted file mode 100644 index f0f0dd41bf7bf182a9205244d9e050424ed7c9e0..0000000000000000000000000000000000000000 --- a/metainfo/fuzz.go +++ /dev/null @@ -1,29 +0,0 @@ -//go:build gofuzz -// +build gofuzz - -package metainfo - -import ( - "github.com/anacrolix/torrent/bencode" -) - -func Fuzz(b []byte) int { - var mi MetaInfo - err := bencode.Unmarshal(b, &mi) - if err != nil { - return 0 - } - _, err = bencode.Marshal(mi) - if err != nil { - panic(err) - } - info, err := mi.UnmarshalInfo() - if err != nil { - return 0 - } - _, err = bencode.Marshal(info) - if err != nil { - panic(err) - } - return 1 -} diff --git a/metainfo/fuzz_test.go b/metainfo/fuzz_test.go new file mode 100644 index 0000000000000000000000000000000000000000..4b39d4fd3ccbec7598f90525a99d7231dbf2070e --- /dev/null +++ b/metainfo/fuzz_test.go @@ -0,0 +1,46 @@ +//go:build go1.18 + +package metainfo + +import ( + "os" + "path/filepath" + "testing" + + "github.com/anacrolix/torrent/bencode" +) + +func Fuzz(f *testing.F) { + // Is there an OS-agnostic version of Glob? + matches, err := filepath.Glob(filepath.FromSlash("testdata/*.torrent")) + if err != nil { + f.Fatal(err) + } + for _, m := range matches { + b, err := os.ReadFile(m) + if err != nil { + f.Fatal(err) + } + f.Logf("adding %q", m) + f.Add(b) + } + f.Fuzz(func(t *testing.T, b []byte) { + var mi MetaInfo + err := bencode.Unmarshal(b, &mi) + if err != nil { + t.Skip(err) + } + _, err = bencode.Marshal(mi) + if err != nil { + panic(err) + } + info, err := mi.UnmarshalInfo() + if err != nil { + t.Skip(err) + } + _, err = bencode.Marshal(info) + if err != nil { + panic(err) + } + }) +}