From be1e46383df3abdb07d892b48f81fd8d0dc2c3b8 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Sun, 16 Jan 2022 09:28:18 -0600 Subject: [PATCH] fix: allow malformed magnet links to be added (#2410) --- libtransmission/web-utils.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/libtransmission/web-utils.cc b/libtransmission/web-utils.cc index 46c6291ee..67abdaff4 100644 --- a/libtransmission/web-utils.cc +++ b/libtransmission/web-utils.cc @@ -301,14 +301,25 @@ std::optional tr_urlParse(std::string_view url) { url = tr_strvStrip(url); + auto parsed = tr_url_parsed_t{}; + parsed.full = url; + + // So many magnet links are malformed, e.g. not escaping text + // in the display name, that we're better off handling magnets + // as a special case before even scanning for invalid chars. + auto constexpr MagnetStart = "magnet:?"sv; + if (tr_strvStartsWith(url, MagnetStart)) + { + parsed.scheme = "magnet"sv; + parsed.query = url.substr(std::size(MagnetStart)); + return parsed; + } + if (!urlCharsAreValid(url)) { return std::nullopt; } - auto parsed = tr_url_parsed_t{}; - parsed.full = url; - // scheme parsed.scheme = tr_strvSep(&url, ':'); if (std::empty(parsed.scheme))