Skip to content

Commit 670003c

Browse files
committed
Add test for trackers being escaped in magnet link
+ minor refactor +semver: skip
1 parent 6784cfe commit 670003c

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

BencodeNET.Tests/Torrents/TorrentUtilTests.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ public void CreateMagnetLink_NonEmptyTrackers_WithOptionIncludeTrackers_AreInclu
105105
magnet.Should().Be($"magnet:?xt=urn:btih:{infoHash}&dn={displayName}&tr={tracker1}&tr={tracker2}");
106106
}
107107

108+
[Theory]
109+
[AutoMockedData("https://en.wikipedia.org/wiki/Bencode", "https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FBencode")]
110+
public void CreateMagnetLink_Tracker_IsEscapedWhenEscapingEnabled(string tracker, string expected, string infoHash, string displayName)
111+
{
112+
var trackers = new List<string> { tracker };
113+
114+
var magnet = TorrentUtil.CreateMagnetLink(infoHash, displayName, trackers, MagnetLinkOptions.IncludeTrackers);
115+
116+
magnet.Should().Be($"magnet:?xt=urn:btih:{infoHash}&dn={displayName}&tr={expected}");
117+
}
118+
108119
[Theory]
109120
[AutoMockedData]
110121
public void CreateMagnetLink_Torrent_UsesInfoHashDisplayNameAndTrackersFromTorrent(string infoHash, string displayName, IList<IList<string>> trackers)

BencodeNET/Torrents/TorrentUtil.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,13 @@ public static string CreateMagnetLink(string infoHash, string displayName, IEnum
120120
if (!string.IsNullOrWhiteSpace(displayName))
121121
magnet += $"&dn={displayName}";
122122

123-
var validTrackers = trackers?.Where(x => !string.IsNullOrWhiteSpace(x)).ToList() ?? new List<string>();
123+
var validEscapedTrackers =
124+
trackers?.Where(x => !string.IsNullOrWhiteSpace(x)).Select(Uri.EscapeDataString).ToList() ??
125+
new List<string>();
124126

125-
if (options.HasFlag(MagnetLinkOptions.IncludeTrackers) && validTrackers.Any())
127+
if (options.HasFlag(MagnetLinkOptions.IncludeTrackers) && validEscapedTrackers.Any())
126128
{
127-
var trackersString = string.Join("&", validTrackers.Select(x => $"tr={Uri.EscapeDataString(x)}"));
129+
var trackersString = string.Join("&", validEscapedTrackers.Select(x => $"tr={x}"));
128130
magnet += $"&{trackersString}";
129131
}
130132

0 commit comments

Comments
 (0)