]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add error return value to metainfo.MetaInfo.UnmarshalInfo
authorMatt Joiner <anacrolix@gmail.com>
Tue, 20 Sep 2016 02:25:40 +0000 (12:25 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 20 Sep 2016 02:32:15 +0000 (12:32 +1000)
Too many problems caused by bad info bytes in downstream projects.

metainfo/magnet_test.go
metainfo/metainfo.go
metainfo/metainfo_test.go
spec.go

index 1ad4b170395a41ff83c74601be0159763a185aa2..c90713f30579520d87daa939b80b5f00a4a234c7 100644 (file)
@@ -74,7 +74,9 @@ func TestMagnetize(t *testing.T) {
        mi, err := LoadFromFile("../testdata/bootstrap.dat.torrent")
        require.NoError(t, err)
 
-       m := mi.Magnet(mi.UnmarshalInfo().Name, mi.HashInfoBytes())
+       info, err := mi.UnmarshalInfo()
+       require.NoError(t, err)
+       m := mi.Magnet(info.Name, mi.HashInfoBytes())
 
        assert.EqualValues(t, "bootstrap.dat", m.DisplayName)
 
index 6d1d7e2efecfc44b46a51a7a4a05c6ed77d58e07..96a64cbc0b4499bfca26818c51602cfafb2a4170 100644 (file)
@@ -1,7 +1,6 @@
 package metainfo
 
 import (
-       "fmt"
        "io"
        "os"
        "time"
@@ -49,11 +48,8 @@ func LoadFromFile(filename string) (*MetaInfo, error) {
        return Load(f)
 }
 
-func (mi MetaInfo) UnmarshalInfo() (info Info) {
-       err := bencode.Unmarshal(mi.InfoBytes, &info)
-       if err != nil {
-               panic(fmt.Sprintf("bad info bytes: %s", err))
-       }
+func (mi MetaInfo) UnmarshalInfo() (info Info, err error) {
+       err = bencode.Unmarshal(mi.InfoBytes, &info)
        return
 }
 
index de81b8da67c0f8fc11c787084c8b67b513944320..037f8825f5a4421be15fa77d705b54c97721716b 100644 (file)
@@ -18,8 +18,9 @@ import (
 func testFile(t *testing.T, filename string) {
        mi, err := LoadFromFile(filename)
        require.NoError(t, err)
+       info, err := mi.UnmarshalInfo()
+       require.NoError(t, err)
 
-       info := mi.UnmarshalInfo()
        if len(info.Files) == 1 {
                t.Logf("Single file: %s (length: %d)\n", info.Name, info.Files[0].Length)
        } else {
diff --git a/spec.go b/spec.go
index e6b58d8c11c32fd94111fd8bd90b7464900067a4..5dbd472bda965b5dbffed780ecefa3a456d13a3a 100644 (file)
--- a/spec.go
+++ b/spec.go
@@ -34,7 +34,7 @@ func TorrentSpecFromMagnetURI(uri string) (spec *TorrentSpec, err error) {
 }
 
 func TorrentSpecFromMetaInfo(mi *metainfo.MetaInfo) (spec *TorrentSpec) {
-       info := mi.UnmarshalInfo()
+       info, _ := mi.UnmarshalInfo()
        spec = &TorrentSpec{
                Trackers:    mi.AnnounceList,
                InfoBytes:   mi.InfoBytes,