forked from premiere/premiere-libtorrent
magnet links: unescape hash parameter (#1925)
This commit is contained in:
parent
87592d50f2
commit
cdf066c4e1
|
@ -216,12 +216,18 @@ namespace libtorrent {
|
||||||
}
|
}
|
||||||
|
|
||||||
string_view btih = url_has_argument(uri, "xt");
|
string_view btih = url_has_argument(uri, "xt");
|
||||||
|
std::string unescaped_btih;
|
||||||
if (btih.empty())
|
if (btih.empty())
|
||||||
{
|
{
|
||||||
ec = errors::missing_info_hash_in_uri;
|
ec = errors::missing_info_hash_in_uri;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (btih.find('%') != string_view::npos)
|
||||||
|
{
|
||||||
|
unescaped_btih = unescape_string(btih, ec);
|
||||||
|
if (ec) return;
|
||||||
|
btih = unescaped_btih;
|
||||||
|
}
|
||||||
if (btih.substr(0, 9) != "urn:btih:")
|
if (btih.substr(0, 9) != "urn:btih:")
|
||||||
{
|
{
|
||||||
ec = errors::missing_info_hash_in_uri;
|
ec = errors::missing_info_hash_in_uri;
|
||||||
|
|
|
@ -224,6 +224,32 @@ TORRENT_TEST(magnet)
|
||||||
p2 = s->abort();
|
p2 = s->abort();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TORRENT_TEST(parse_escaped_hash_parameter)
|
||||||
|
{
|
||||||
|
error_code ec;
|
||||||
|
add_torrent_params p;
|
||||||
|
parse_magnet_uri("magnet:?xt=urn%3Abtih%3Acdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd", p, ec);
|
||||||
|
TEST_CHECK(!ec);
|
||||||
|
TEST_EQUAL(aux::to_hex(p.info_hash), "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd");
|
||||||
|
}
|
||||||
|
|
||||||
|
TORRENT_TEST(parse_escaped_hash_parameter_in_hex)
|
||||||
|
{
|
||||||
|
error_code ec;
|
||||||
|
add_torrent_params p;
|
||||||
|
parse_magnet_uri("magnet:?xt=urn:btih:cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdc%64", p, ec);
|
||||||
|
TEST_CHECK(!ec);
|
||||||
|
TEST_EQUAL(aux::to_hex(p.info_hash), "cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd");
|
||||||
|
}
|
||||||
|
|
||||||
|
TORRENT_TEST(parse_invalid_escaped_hash_parameter)
|
||||||
|
{
|
||||||
|
error_code ec;
|
||||||
|
add_torrent_params p;
|
||||||
|
parse_magnet_uri("magnet:?xt=urn%%3A", p, ec);
|
||||||
|
TEST_EQUAL(ec, error_code(errors::invalid_escaped_string));
|
||||||
|
}
|
||||||
|
|
||||||
TORRENT_TEST(parse_missing_hash)
|
TORRENT_TEST(parse_missing_hash)
|
||||||
{
|
{
|
||||||
// parse_magnet_uri
|
// parse_magnet_uri
|
||||||
|
|
Loading…
Reference in New Issue