]> Sergey Matveev's repositories - btrtrc.git/commitdiff
cmd/torrentfs: Fix panic on missing info
authorMatt Joiner <anacrolix@gmail.com>
Sun, 1 Aug 2021 11:38:35 +0000 (21:38 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 1 Aug 2021 11:38:35 +0000 (21:38 +1000)
client.go
cmd/torrentfs/main.go
spec.go

index 1f2af67fa30082b0ee1d3e98b7f5a129fd6b9d99..ea8a4803cc5e54a7c5a3127cc6a5c3841f849ca3 100644 (file)
--- 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
 }
 
index dd66e9899e0a3a01376ca8abd0f96cdcf51d397a..adce60248829c57302ceb3c7fadac063d0b0f0dd 100644 (file)
@@ -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 7de7aa611139f2ec6927479616e718b1fe390778..e12bb0cb26367626b53fbec35392b0a0e7c4f691 100644 (file)
--- 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
 }