mirror of https://github.com/aria2/aria2
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Prepended _dir+"/" after joining path elements in torrent file. * src/DefaultBtContext.cc * test/DefaultBtContextTest.ccpull/1/head
parent
49fea7585b
commit
75a525b031
|
@ -1,3 +1,9 @@
|
||||||
|
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Prepended _dir+"/" after joining path elements in torrent file.
|
||||||
|
* src/DefaultBtContext.cc
|
||||||
|
* test/DefaultBtContextTest.cc
|
||||||
|
|
||||||
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2009-03-13 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Added missing IndexBtMessageValidator.h
|
Added missing IndexBtMessageValidator.h
|
||||||
|
|
|
@ -154,19 +154,18 @@ void DefaultBtContext::extractFileEntries(const bencode::BDE& infoDict,
|
||||||
std::vector<std::string> pathelem(pathList.size());
|
std::vector<std::string> pathelem(pathList.size());
|
||||||
std::transform(pathList.listBegin(), pathList.listEnd(), pathelem.begin(),
|
std::transform(pathList.listBegin(), pathList.listEnd(), pathelem.begin(),
|
||||||
std::mem_fun_ref(&bencode::BDE::s));
|
std::mem_fun_ref(&bencode::BDE::s));
|
||||||
std::string path = Util::joinPath(pathelem.begin(), pathelem.end());
|
std::string path =
|
||||||
|
name+"/"+Util::joinPath(pathelem.begin(), pathelem.end());
|
||||||
// Split path with '/' again because each pathList element can
|
// Split path with '/' again because each pathList element can
|
||||||
// contain "/" inside.
|
// contain "/" inside.
|
||||||
std::deque<std::string> elements;
|
std::deque<std::string> elements;
|
||||||
Util::slice(elements, path, '/');
|
Util::slice(elements, path, '/');
|
||||||
elements.push_front(name);
|
|
||||||
elements.push_front(_dir);
|
|
||||||
path = Util::joinPath(elements.begin(), elements.end());
|
path = Util::joinPath(elements.begin(), elements.end());
|
||||||
|
|
||||||
std::deque<std::string> uris;
|
std::deque<std::string> uris;
|
||||||
std::transform(urlList.begin(), urlList.end(), std::back_inserter(uris),
|
std::transform(urlList.begin(), urlList.end(), std::back_inserter(uris),
|
||||||
std::bind2nd(std::plus<std::string>(), "/"+path));
|
std::bind2nd(std::plus<std::string>(), "/"+path));
|
||||||
FileEntryHandle fileEntry(new FileEntry(path, fileLengthData.i(),
|
FileEntryHandle fileEntry(new FileEntry(_dir+"/"+path, fileLengthData.i(),
|
||||||
offset, uris));
|
offset, uris));
|
||||||
fileEntries.push_back(fileEntry);
|
fileEntries.push_back(fileEntry);
|
||||||
offset += fileEntry->getLength();
|
offset += fileEntry->getLength();
|
||||||
|
@ -184,9 +183,8 @@ void DefaultBtContext::extractFileEntries(const bencode::BDE& infoDict,
|
||||||
// Slice path by '/' just in case nasty ".." is included in name
|
// Slice path by '/' just in case nasty ".." is included in name
|
||||||
std::deque<std::string> pathelems;
|
std::deque<std::string> pathelems;
|
||||||
Util::slice(pathelems, name, '/');
|
Util::slice(pathelems, name, '/');
|
||||||
pathelems.push_front(_dir);
|
|
||||||
SharedHandle<FileEntry> fileEntry
|
SharedHandle<FileEntry> fileEntry
|
||||||
(new FileEntry(Util::joinPath(pathelems.begin(), pathelems.end()),
|
(new FileEntry(_dir+"/"+Util::joinPath(pathelems.begin(),pathelems.end()),
|
||||||
totalLength, 0, urlList));
|
totalLength, 0, urlList));
|
||||||
fileEntries.push_back(fileEntry);
|
fileEntries.push_back(fileEntry);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,8 @@ class DefaultBtContextTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testLoadFromMemory);
|
CPPUNIT_TEST(testLoadFromMemory);
|
||||||
CPPUNIT_TEST(testLoadFromMemory_somethingMissing);
|
CPPUNIT_TEST(testLoadFromMemory_somethingMissing);
|
||||||
CPPUNIT_TEST(testLoadFromMemory_overrideName);
|
CPPUNIT_TEST(testLoadFromMemory_overrideName);
|
||||||
|
CPPUNIT_TEST(testLoadFromMemory_joinPathMulti);
|
||||||
|
CPPUNIT_TEST(testLoadFromMemory_joinPathSingle);
|
||||||
CPPUNIT_TEST(testGetNodes);
|
CPPUNIT_TEST(testGetNodes);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
public:
|
public:
|
||||||
|
@ -67,6 +69,8 @@ public:
|
||||||
void testLoadFromMemory();
|
void testLoadFromMemory();
|
||||||
void testLoadFromMemory_somethingMissing();
|
void testLoadFromMemory_somethingMissing();
|
||||||
void testLoadFromMemory_overrideName();
|
void testLoadFromMemory_overrideName();
|
||||||
|
void testLoadFromMemory_joinPathMulti();
|
||||||
|
void testLoadFromMemory_joinPathSingle();
|
||||||
void testGetNodes();
|
void testGetNodes();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -108,11 +112,11 @@ void DefaultBtContextTest::testGetFileEntries() {
|
||||||
std::deque<SharedHandle<FileEntry> >::iterator itr = fileEntries.begin();
|
std::deque<SharedHandle<FileEntry> >::iterator itr = fileEntries.begin();
|
||||||
|
|
||||||
SharedHandle<FileEntry> fileEntry1 = *itr;
|
SharedHandle<FileEntry> fileEntry1 = *itr;
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2-test/aria2/src/aria2c"),
|
CPPUNIT_ASSERT_EQUAL(std::string("./aria2-test/aria2/src/aria2c"),
|
||||||
fileEntry1->getPath());
|
fileEntry1->getPath());
|
||||||
itr++;
|
itr++;
|
||||||
SharedHandle<FileEntry> fileEntry2 = *itr;
|
SharedHandle<FileEntry> fileEntry2 = *itr;
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2-test/aria2-0.2.2.tar.bz2"),
|
CPPUNIT_ASSERT_EQUAL(std::string("./aria2-test/aria2-0.2.2.tar.bz2"),
|
||||||
fileEntry2->getPath());
|
fileEntry2->getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -126,7 +130,7 @@ void DefaultBtContextTest::testGetFileEntriesSingle() {
|
||||||
std::deque<SharedHandle<FileEntry> >::iterator itr = fileEntries.begin();
|
std::deque<SharedHandle<FileEntry> >::iterator itr = fileEntries.begin();
|
||||||
|
|
||||||
SharedHandle<FileEntry> fileEntry1 = *itr;
|
SharedHandle<FileEntry> fileEntry1 = *itr;
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2-0.8.2.tar.bz2"),
|
CPPUNIT_ASSERT_EQUAL(std::string("./aria2-0.8.2.tar.bz2"),
|
||||||
fileEntry1->getPath());
|
fileEntry1->getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,7 +293,7 @@ void DefaultBtContextTest::testGetFileEntries_multiFileUrlList() {
|
||||||
std::deque<SharedHandle<FileEntry> >::iterator itr = fileEntries.begin();
|
std::deque<SharedHandle<FileEntry> >::iterator itr = fileEntries.begin();
|
||||||
|
|
||||||
SharedHandle<FileEntry> fileEntry1 = *itr;
|
SharedHandle<FileEntry> fileEntry1 = *itr;
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2-test/aria2/src/aria2c"),
|
CPPUNIT_ASSERT_EQUAL(std::string("./aria2-test/aria2/src/aria2c"),
|
||||||
fileEntry1->getPath());
|
fileEntry1->getPath());
|
||||||
std::deque<std::string> uris1 = fileEntry1->getAssociatedUris();
|
std::deque<std::string> uris1 = fileEntry1->getAssociatedUris();
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)2, uris1.size());
|
CPPUNIT_ASSERT_EQUAL((size_t)2, uris1.size());
|
||||||
|
@ -300,7 +304,7 @@ void DefaultBtContextTest::testGetFileEntries_multiFileUrlList() {
|
||||||
|
|
||||||
itr++;
|
itr++;
|
||||||
SharedHandle<FileEntry> fileEntry2 = *itr;
|
SharedHandle<FileEntry> fileEntry2 = *itr;
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2-test/aria2-0.2.2.tar.bz2"),
|
CPPUNIT_ASSERT_EQUAL(std::string("./aria2-test/aria2-0.2.2.tar.bz2"),
|
||||||
fileEntry2->getPath());
|
fileEntry2->getPath());
|
||||||
std::deque<std::string> uris2 = fileEntry2->getAssociatedUris();
|
std::deque<std::string> uris2 = fileEntry2->getAssociatedUris();
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)2, uris2.size());
|
CPPUNIT_ASSERT_EQUAL((size_t)2, uris2.size());
|
||||||
|
@ -319,7 +323,7 @@ void DefaultBtContextTest::testGetFileEntries_singleFileUrlList() {
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntries.size());
|
CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntries.size());
|
||||||
|
|
||||||
SharedHandle<FileEntry> fileEntry1 = fileEntries.front();
|
SharedHandle<FileEntry> fileEntry1 = fileEntries.front();
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2.tar.bz2"),
|
CPPUNIT_ASSERT_EQUAL(std::string("./aria2.tar.bz2"),
|
||||||
fileEntry1->getPath());
|
fileEntry1->getPath());
|
||||||
std::deque<std::string> uris1 = fileEntry1->getAssociatedUris();
|
std::deque<std::string> uris1 = fileEntry1->getAssociatedUris();
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)1, uris1.size());
|
CPPUNIT_ASSERT_EQUAL((size_t)1, uris1.size());
|
||||||
|
@ -364,6 +368,34 @@ void DefaultBtContextTest::testLoadFromMemory_overrideName()
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("aria2-override.name"), btContext.getName());
|
CPPUNIT_ASSERT_EQUAL(std::string("aria2-override.name"), btContext.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DefaultBtContextTest::testLoadFromMemory_joinPathMulti()
|
||||||
|
{
|
||||||
|
std::string memory =
|
||||||
|
"d8:announce27:http://example.com/announce4:infod5:filesld6:lengthi262144e4:pathl7:../dir14:dir28:file.imgeee4:name14:../name1/name212:piece lengthi262144e6:pieces20:00000000000000000000ee";
|
||||||
|
|
||||||
|
DefaultBtContext btContext;
|
||||||
|
btContext.setDir("/tmp");
|
||||||
|
btContext.loadFromMemory(memory, "default");
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("../name1/name2"), btContext.getName());
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("/tmp/name1/dir1/dir2/file.img"),
|
||||||
|
btContext.getFileEntries().front()->getPath());
|
||||||
|
}
|
||||||
|
|
||||||
|
void DefaultBtContextTest::testLoadFromMemory_joinPathSingle()
|
||||||
|
{
|
||||||
|
std::string memory =
|
||||||
|
"d8:announce27:http://example.com/announce4:infod4:name14:../name1/name26:lengthi262144e12:piece lengthi262144e6:pieces20:00000000000000000000ee";
|
||||||
|
|
||||||
|
DefaultBtContext btContext;
|
||||||
|
btContext.setDir("/tmp");
|
||||||
|
btContext.loadFromMemory(memory, "default");
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("../name1/name2"), btContext.getName());
|
||||||
|
CPPUNIT_ASSERT_EQUAL(std::string("/tmp/name1/name2"),
|
||||||
|
btContext.getFileEntries().front()->getPath());
|
||||||
|
}
|
||||||
|
|
||||||
void DefaultBtContextTest::testGetNodes()
|
void DefaultBtContextTest::testGetNodes()
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue