From: Matt Joiner Date: Sun, 1 Aug 2021 11:38:35 +0000 (+1000) Subject: cmd/torrentfs: Fix panic on missing info X-Git-Tag: v1.30.0~5 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=555cb064dd1d001e3ca8f0cdd75a971ca2367255;p=btrtrc.git cmd/torrentfs: Fix panic on missing info --- diff --git a/client.go b/client.go index 1f2af67f..ea8a4803 100644 --- a/client.go +++ b/client.go @@ -1323,7 +1323,11 @@ func (cl *Client) AddMagnet(uri string) (T *Torrent, err error) { } func (cl *Client) AddTorrent(mi *metainfo.MetaInfo) (T *Torrent, err error) { - T, _, err = cl.AddTorrentSpec(TorrentSpecFromMetaInfo(mi)) + ts, err := TorrentSpecFromMetaInfoErr(mi) + if err != nil { + return + } + T, _, err = cl.AddTorrentSpec(ts) return } diff --git a/cmd/torrentfs/main.go b/cmd/torrentfs/main.go index dd66e989..adce6024 100644 --- a/cmd/torrentfs/main.go +++ b/cmd/torrentfs/main.go @@ -114,7 +114,7 @@ func mainErr() error { if ev.TorrentFilePath != "" { _, err := client.AddTorrentFromFile(ev.TorrentFilePath) if err != nil { - log.Printf("error adding torrent to client: %s", err) + log.Printf("error adding torrent from file %q to client: %v", ev.TorrentFilePath, err) } } else if ev.MagnetURI != "" { _, err := client.AddMagnet(ev.MagnetURI) diff --git a/spec.go b/spec.go index 7de7aa61..e12bb0cb 100644 --- a/spec.go +++ b/spec.go @@ -1,6 +1,8 @@ package torrent import ( + "fmt" + "github.com/anacrolix/torrent/metainfo" "github.com/anacrolix/torrent/storage" ) @@ -46,10 +48,10 @@ func TorrentSpecFromMagnetUri(uri string) (spec *TorrentSpec, err error) { return } -func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) *TorrentSpec { +func TorrentSpecFromMetaInfoErr(mi *metainfo.MetaInfo) (*TorrentSpec, error) { info, err := mi.UnmarshalInfo() if err != nil { - panic(err) + return nil, fmt.Errorf("unmarshalling info: %w", err) } return &TorrentSpec{ Trackers: mi.UpvertedAnnounceList(), @@ -64,5 +66,13 @@ func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) *TorrentSpec { } return }(), + }, nil +} + +func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) *TorrentSpec { + ts, err := TorrentSpecFromMetaInfoErr(mi) + if err != nil { + panic(err) } + return ts }