forked from premiere/premiere-libtorrent
fix parsing of torrents with certain invalid filenames
This commit is contained in:
parent
8ba5845643
commit
f080149081
|
@ -1,6 +1,7 @@
|
||||||
|
|
||||||
1.1.5 release
|
1.1.5 release
|
||||||
|
|
||||||
|
* fix parsing of torrents with certain invalid filenames
|
||||||
* fix leak of torrent_peer objecs (entries in peer_list)
|
* fix leak of torrent_peer objecs (entries in peer_list)
|
||||||
* fix leak of peer_class objects (when setting per-torrent rate limits)
|
* fix leak of peer_class objects (when setting per-torrent rate limits)
|
||||||
* expose peer_class API to python binding
|
* expose peer_class API to python binding
|
||||||
|
|
|
@ -431,6 +431,7 @@ namespace libtorrent
|
||||||
|
|
||||||
if (p && p.list_size() > 0)
|
if (p && p.list_size() > 0)
|
||||||
{
|
{
|
||||||
|
std::size_t const orig_path_len = path.size();
|
||||||
int const preallocate = path.size() + path_length(p, ec);
|
int const preallocate = path.size() + path_length(p, ec);
|
||||||
if (ec) return false;
|
if (ec) return false;
|
||||||
path.reserve(preallocate);
|
path.reserve(preallocate);
|
||||||
|
@ -450,6 +451,14 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
sanitize_append_path_element(path, e.string_ptr(), e.string_length());
|
sanitize_append_path_element(path, e.string_ptr(), e.string_length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if all path elements were sanitized away, we need to use another
|
||||||
|
// name instead
|
||||||
|
if (path.size() == orig_path_len)
|
||||||
|
{
|
||||||
|
path += TORRENT_SEPARATOR;
|
||||||
|
path += "_";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (file_flags & file_storage::flag_pad_file)
|
else if (file_flags & file_storage::flag_pad_file)
|
||||||
{
|
{
|
||||||
|
|
|
@ -109,6 +109,8 @@ EXTRA_DIST = Jamfile \
|
||||||
test_torrents/url_seed_multi_space.torrent \
|
test_torrents/url_seed_multi_space.torrent \
|
||||||
test_torrents/url_seed_multi_space_nolist.torrent \
|
test_torrents/url_seed_multi_space_nolist.torrent \
|
||||||
test_torrents/whitespace_url.torrent \
|
test_torrents/whitespace_url.torrent \
|
||||||
|
test_torrents/invalid_filename.torrent \
|
||||||
|
test_torrents/invalid_filename2.torrent \
|
||||||
mutable_test_torrents/test1.torrent \
|
mutable_test_torrents/test1.torrent \
|
||||||
mutable_test_torrents/test1_pad_files.torrent \
|
mutable_test_torrents/test1_pad_files.torrent \
|
||||||
mutable_test_torrents/test1_single.torrent\
|
mutable_test_torrents/test1_single.torrent\
|
||||||
|
|
|
@ -134,6 +134,8 @@ static test_torrent_t test_torrents[] =
|
||||||
{ "unordered.torrent" },
|
{ "unordered.torrent" },
|
||||||
{ "symlink_zero_size.torrent" },
|
{ "symlink_zero_size.torrent" },
|
||||||
{ "pad_file_no_path.torrent" },
|
{ "pad_file_no_path.torrent" },
|
||||||
|
{ "invalid_filename.torrent" },
|
||||||
|
{ "invalid_filename2.torrent" },
|
||||||
};
|
};
|
||||||
|
|
||||||
struct test_failing_torrent_t
|
struct test_failing_torrent_t
|
||||||
|
@ -769,6 +771,14 @@ TORRENT_TEST(parse_torrents)
|
||||||
TEST_EQUAL(ti->num_files(), 2);
|
TEST_EQUAL(ti->num_files(), 2);
|
||||||
TEST_EQUAL(ti->files().file_path(1), combine_path(".pad", "0"));
|
TEST_EQUAL(ti->files().file_path(1), combine_path(".pad", "0"));
|
||||||
}
|
}
|
||||||
|
else if (std::string(test_torrents[i].file) == "invalid_filename.torrent")
|
||||||
|
{
|
||||||
|
TEST_EQUAL(ti->num_files(), 2);
|
||||||
|
}
|
||||||
|
else if (std::string(test_torrents[i].file) == "invalid_filename2.torrent")
|
||||||
|
{
|
||||||
|
TEST_EQUAL(ti->num_files(), 3);
|
||||||
|
}
|
||||||
|
|
||||||
file_storage const& fs = ti->files();
|
file_storage const& fs = ti->files();
|
||||||
for (int i = 0; i < fs.num_files(); ++i)
|
for (int i = 0; i < fs.num_files(); ++i)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
d10:created by10:libtorrent13:creation datei1419490173e4:infod5:filesld6:lengthi51200e4:pathl1:feed6:lengthi14336e4:pathl1:.eee4:name5:\est212:piece lengthi16384e6:pieces80:01234567890123456789012345678901234567890123456789012345678901234567890123456789ee
|
|
@ -0,0 +1 @@
|
||||||
|
d10:created by10:libtorrent13:creation datei1419490173e4:infod5:filesld6:lengthi51200e4:pathl1:feed6:lengthi14335e4:pathl1:.1:.eed6:lengthi1e4:pathl1:/1:.eee4:name5:\est212:piece lengthi16384e6:pieces80:01234567890123456789012345678901234567890123456789012345678901234567890123456789ee
|
Loading…
Reference in New Issue