2010-02-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Store name attribute of metalink:metaurl element in MetalinkMetaurl.
	* src/MetalinkMetaurl.h
	* src/MetalinkParserController.cc
	* src/MetalinkParserController.h
	* src/MetalinkParserStateMachine.cc
	* src/MetalinkParserStateMachine.h
	* src/MetalinkParserStateV4Impl.cc
	* test/MetalinkProcessorTest.cc
	* test/metalink4-dirtraversal.xml
pull/1/head
Tatsuhiro Tsujikawa 2010-02-26 08:55:10 +00:00
parent 15c1f64023
commit 5032394c6a
9 changed files with 47 additions and 1 deletions

View File

@ -1,3 +1,15 @@
2010-02-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Store name attribute of metalink:metaurl element in MetalinkMetaurl.
* src/MetalinkMetaurl.h
* src/MetalinkParserController.cc
* src/MetalinkParserController.h
* src/MetalinkParserStateMachine.cc
* src/MetalinkParserStateMachine.h
* src/MetalinkParserStateV4Impl.cc
* test/MetalinkProcessorTest.cc
* test/metalink4-dirtraversal.xml
2010-02-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added MetalinkMetaurl class. It corresponds to metalink:metaurl

View File

@ -46,6 +46,7 @@ public:
std::string url;
std::string mediatype;
int priority;
std::string name;
MetalinkMetaurl();

View File

@ -567,6 +567,14 @@ void MetalinkParserController::setPriorityOfMetaurl(int priority)
_tMetaurl->priority = priority;
}
void MetalinkParserController::setNameOfMetaurl(const std::string& name)
{
if(_tMetaurl.isNull()) {
return;
}
_tMetaurl->name = name;
}
void MetalinkParserController::commitMetaurlTransaction()
{
if(_tMetaurl.isNull()) {

View File

@ -187,6 +187,8 @@ public:
void setPriorityOfMetaurl(int priority);
void setNameOfMetaurl(const std::string& name);
void commitMetaurlTransaction();
void cancelMetaurlTransaction();

View File

@ -475,6 +475,11 @@ void MetalinkParserStateMachine::setPriorityOfMetaurl(int priority)
_ctrl->setPriorityOfMetaurl(priority);
}
void MetalinkParserStateMachine::setNameOfMetaurl(const std::string& name)
{
_ctrl->setNameOfMetaurl(name);
}
void MetalinkParserStateMachine::commitMetaurlTransaction()
{
_ctrl->commitMetaurlTransaction();

View File

@ -237,6 +237,8 @@ public:
void setPriorityOfMetaurl(int priority);
void setNameOfMetaurl(const std::string& name);
void commitMetaurlTransaction();
void cancelMetaurlTransaction();

View File

@ -130,6 +130,16 @@ void FileMetalinkParserStateV4::beginElement
stm->setOSStateV4();
} else if(localname == METAURL) {
stm->setMetaurlStateV4();
std::string name;
{
std::vector<XmlAttr>::const_iterator itr = findAttr(attrs, NAME);
if(itr != attrs.end()) {
name = (*itr).value;
if(util::detectDirTraversal(name)) {
return;
}
}
}
// TODO currently NAME is ignored
int priority;
{
@ -159,6 +169,7 @@ void FileMetalinkParserStateV4::beginElement
stm->newMetaurlTransaction();
stm->setPriorityOfMetaurl(priority);
stm->setMediatypeOfMetaurl(mediatype);
stm->setNameOfMetaurl(name);
} else if(localname == URL) {
stm->setURLStateV4();
std::string location;

View File

@ -135,7 +135,9 @@ void MetalinkProcessorTest::testParseFileV4_dirtraversal()
{
MetalinkProcessor proc;
SharedHandle<Metalinker> m = proc.parseFile("metalink4-dirtraversal.xml");
CPPUNIT_ASSERT_EQUAL((size_t)0, m->entries.size());
CPPUNIT_ASSERT_EQUAL((size_t)1, m->entries.size());
CPPUNIT_ASSERT_EQUAL((size_t)0, m->entries[0]->resources.size());
CPPUNIT_ASSERT_EQUAL((size_t)0, m->entries[0]->metaurls.size());
}
void MetalinkProcessorTest::testParseFileV4_attrs()

View File

@ -21,4 +21,7 @@
<file name="..">
<url location="fr" priority="1">http://example.com/example.ext</url>
</file>
<file name="foo">
<metaurl name="../foo" mediatype="torrent">http://example.com/example.torrent</metaurl>
</file>
</metalink>