From 3ce95f21fdb16f21012c506b295a13ee6a82ec79 Mon Sep 17 00:00:00 2001 From: Levi Date: Fri, 27 Dec 2024 19:06:17 +0800 Subject: [PATCH] fix: some torrents can not resovle (#857) --- internal/protocol/bt/fetcher.go | 26 +++++++++++++----- internal/protocol/bt/fetcher_test.go | 13 +++++++-- .../protocol/bt/testdata/test.unclean.torrent | Bin 0 -> 29787 bytes 3 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 internal/protocol/bt/testdata/test.unclean.torrent diff --git a/internal/protocol/bt/fetcher.go b/internal/protocol/bt/fetcher.go index 1a45a6f93..3244be1a7 100644 --- a/internal/protocol/bt/fetcher.go +++ b/internal/protocol/bt/fetcher.go @@ -11,7 +11,9 @@ import ( "github.com/GopeedLab/gopeed/pkg/util" "github.com/anacrolix/torrent" "github.com/anacrolix/torrent/metainfo" + "io" "net/url" + "os" "path/filepath" "strings" "sync" @@ -359,17 +361,27 @@ func (f *Fetcher) addTorrent(req *base.Request, fromUpload bool) (err error) { schema := util.ParseSchema(req.URL) if schema == "MAGNET" { f.torrent, err = client.AddMagnet(req.URL) - } else if schema == "DATA" { - _, data := util.ParseDataUri(req.URL) - buf := bytes.NewBuffer(data) + } else { + var reader io.Reader + if schema == "DATA" { + _, data := util.ParseDataUri(req.URL) + reader = bytes.NewBuffer(data) + } else { + reader, err = os.Open(req.URL) + if err != nil { + return + } + defer reader.(io.Closer).Close() + } + var metaInfo *metainfo.MetaInfo - metaInfo, err = metainfo.Load(buf) - if err != nil { + metaInfo, err = metainfo.Load(reader) + // Hotfix for https://github.com/anacrolix/torrent/issues/992, ignore "expected EOF" error + // TODO remove this after the issue is fixed + if err != nil && !strings.Contains(err.Error(), "expected EOF") { return err } f.torrent, err = client.AddTorrent(metaInfo) - } else { - f.torrent, err = client.AddTorrentFromFile(req.URL) } if err != nil { return diff --git a/internal/protocol/bt/fetcher_test.go b/internal/protocol/bt/fetcher_test.go index 012c4134a..250f4c4c9 100644 --- a/internal/protocol/bt/fetcher_test.go +++ b/internal/protocol/bt/fetcher_test.go @@ -96,7 +96,7 @@ func doResolve(t *testing.T, fetcher fetcher.Fetcher) { Hash: "8a55cfbd5ca5d11507364765936c4f9e55b253ed", } if !reflect.DeepEqual(want, fetcher.Meta().Res) { - t.Errorf("Resolve() got = %v, want %v", fetcher.Meta().Res, want) + t.Errorf("Resolve Single File Resolve() got = %v, want %v", fetcher.Meta().Res, want) } }) @@ -136,7 +136,16 @@ func doResolve(t *testing.T, fetcher fetcher.Fetcher) { Hash: "ccbc92b0cd8deec16a2ef4be242a8c9243b1cedb", } if !reflect.DeepEqual(want, fetcher.Meta().Res) { - t.Errorf("Resolve() got = %v, want %v", fetcher.Meta().Res, want) + t.Errorf("Resolve Multi Files Resolve() got = %v, want %v", fetcher.Meta().Res, want) + } + }) + + t.Run("Resolve Unclean Torrent", func(t *testing.T) { + err := fetcher.Resolve(&base.Request{ + URL: "./testdata/test.unclean.torrent", + }) + if err != nil { + t.Errorf("Resolve Unclean Torrent Resolve() got = %v, want nil", err) } }) diff --git a/internal/protocol/bt/testdata/test.unclean.torrent b/internal/protocol/bt/testdata/test.unclean.torrent new file mode 100644 index 0000000000000000000000000000000000000000..bd7d71e36ebac4278bf61f49f7e52091be863ef7 GIT binary patch literal 29787 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