forked from premiere/premiere-libtorrent
improves logic to handle slightly broken .torrent files and added tests
This commit is contained in:
parent
1c816fa608
commit
e6e051e7c5
|
@ -386,12 +386,23 @@ namespace libtorrent
|
|||
fs::path tmp = m_name;
|
||||
if (tmp.is_complete())
|
||||
{
|
||||
error = "torrent contains a file with an absolute path: '" + m_name + "'";
|
||||
return false;
|
||||
m_name = tmp.leaf();
|
||||
}
|
||||
if (tmp.has_branch_path())
|
||||
else if (tmp.has_branch_path())
|
||||
{
|
||||
error = "torrent contains name with directories: '" + m_name + "'";
|
||||
fs::path p;
|
||||
for (fs::path::iterator i = tmp.begin()
|
||||
, end(tmp.end()); i != end; ++i)
|
||||
{
|
||||
if (*i == "." || *i == "..") continue;
|
||||
p /= *i;
|
||||
}
|
||||
m_name = p.string();
|
||||
}
|
||||
if (m_name == ".." || m_name == ".")
|
||||
{
|
||||
|
||||
error = "invalid 'name' of torrent (possible exploit attempt)";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -286,9 +286,21 @@ int test_main()
|
|||
torrent["info"] = info;
|
||||
|
||||
torrent_info ti(torrent);
|
||||
|
||||
std::cerr << ti.name() << std::endl;
|
||||
TEST_CHECK(ti.name() == "test1");
|
||||
|
||||
info["name.utf-8"] = "/test1/test2/test3";
|
||||
torrent["info"] = info;
|
||||
torrent_info ti2(torrent);
|
||||
std::cerr << ti2.name() << std::endl;
|
||||
TEST_CHECK(ti2.name() == "test3");
|
||||
|
||||
info["name.utf-8"] = "test2/../test3/.././../../test4";
|
||||
torrent["info"] = info;
|
||||
torrent_info ti3(torrent);
|
||||
std::cerr << ti3.name() << std::endl;
|
||||
TEST_CHECK(ti3.name() == "test2/test3/test4");
|
||||
|
||||
// test kademlia functions
|
||||
|
||||
using namespace libtorrent::dht;
|
||||
|
|
Loading…
Reference in New Issue