From: Matt Joiner <anacrolix@gmail.com>
Date: Mon, 26 Jun 2023 09:48:23 +0000 (+1000)
Subject: Fix error unmarshalling bad metainfo nodes field
X-Git-Tag: v1.52.3
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=050e5cbab8e26a9b28e57a7bc2a964b6d2ceb899;p=btrtrc.git

Fix error unmarshalling bad metainfo nodes field
---

diff --git a/metainfo/metainfo.go b/metainfo/metainfo.go
index cd787260..fbf48671 100644
--- a/metainfo/metainfo.go
+++ b/metainfo/metainfo.go
@@ -10,10 +10,10 @@ import (
 )
 
 type MetaInfo struct {
-	InfoBytes    bencode.Bytes `bencode:"info,omitempty"`          // BEP 3
-	Announce     string        `bencode:"announce,omitempty"`      // BEP 3
-	AnnounceList AnnounceList  `bencode:"announce-list,omitempty"` // BEP 12
-	Nodes        []Node        `bencode:"nodes,omitempty"`         // BEP 5
+	InfoBytes    bencode.Bytes `bencode:"info,omitempty"`                              // BEP 3
+	Announce     string        `bencode:"announce,omitempty"`                          // BEP 3
+	AnnounceList AnnounceList  `bencode:"announce-list,omitempty"`                     // BEP 12
+	Nodes        []Node        `bencode:"nodes,omitempty,ignore_unmarshal_type_error"` // BEP 5
 	// Where's this specified? Mentioned at
 	// https://wiki.theory.org/index.php/BitTorrentSpecification: (optional) the creation time of
 	// the torrent, in standard UNIX epoch format (integer, seconds since 1-Jan-1970 00:00:00 UTC)
diff --git a/metainfo/metainfo_test.go b/metainfo/metainfo_test.go
index ee01c505..d1a6c356 100644
--- a/metainfo/metainfo_test.go
+++ b/metainfo/metainfo_test.go
@@ -153,3 +153,11 @@ func TestStringCreationDate(t *testing.T) {
 	var mi MetaInfo
 	assert.NoError(t, bencode.Unmarshal([]byte("d13:creation date23:29.03.2018 22:18:14 UTC4:infodee"), &mi))
 }
+
+// See https://github.com/anacrolix/torrent/issues/843.
+func TestUnmarshalEmptyStringNodes(t *testing.T) {
+	var mi MetaInfo
+	c := qt.New(t)
+	err := bencode.Unmarshal([]byte("d5:nodes0:e"), &mi)
+	c.Assert(err, qt.IsNil)
+}