+++ /dev/null
-//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
-}
--- /dev/null
+//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)
+ })
+}
+++ /dev/null
-//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
-}
--- /dev/null
+//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)
+ }
+ })
+}