summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-27 08:42:13 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-27 08:42:13 +0000
commit20d78285a865b79e370175b85c96728f6fd54bd9 (patch)
treef5f26237988d7d19a1a2d185f21f21592515dace
parentdc2a51b54a5ef934109edd8416f82a0e050657b2 (diff)
2010-02-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Discard metalink:file if its name attribute is empty string. Removed FileEntry instantiation in MetalinkParserController::setFileLengthOfEntry() * src/MetalinkParserController.cc * src/MetalinkParserStateV3Impl.cc * src/MetalinkParserStateV4Impl.cc
-rw-r--r--ChangeLog9
-rw-r--r--src/MetalinkParserController.cc5
-rw-r--r--src/MetalinkParserStateV3Impl.cc2
-rw-r--r--src/MetalinkParserStateV4Impl.cc2
4 files changed, 13 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 46043d97..ecc44809 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2010-02-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
+ Discard metalink:file if its name attribute is empty string.
+ Removed FileEntry instantiation in
+ MetalinkParserController::setFileLengthOfEntry()
+ * src/MetalinkParserController.cc
+ * src/MetalinkParserStateV3Impl.cc
+ * src/MetalinkParserStateV4Impl.cc
+
+2010-02-27 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
+
Discard torrent file if path data in it contains directory
traversal directives. Discard metalink:file element in Metalink3
format if its name attribute contains directory traversal
diff --git a/src/MetalinkParserController.cc b/src/MetalinkParserController.cc
index cdb97d32..d119bec7 100644
--- a/src/MetalinkParserController.cc
+++ b/src/MetalinkParserController.cc
@@ -96,10 +96,9 @@ void MetalinkParserController::setFileLengthOfEntry(uint64_t length)
return;
}
if(_tEntry->file.isNull()) {
- _tEntry->file.reset(new FileEntry(A2STR::NIL, length, 0));
- } else {
- _tEntry->file->setLength(length);
+ return;
}
+ _tEntry->file->setLength(length);
_tEntry->sizeKnown = true;
}
diff --git a/src/MetalinkParserStateV3Impl.cc b/src/MetalinkParserStateV3Impl.cc
index 33fb1309..c4068836 100644
--- a/src/MetalinkParserStateV3Impl.cc
+++ b/src/MetalinkParserStateV3Impl.cc
@@ -114,7 +114,7 @@ void FilesMetalinkParserState::beginElement
std::vector<XmlAttr>::const_iterator itr = findAttr(attrs, NAME);
if(itr != attrs.end()) {
std::string name = util::trim((*itr).value);
- if(util::detectDirTraversal(name)) {
+ if(name.empty() || util::detectDirTraversal(name)) {
return;
}
stm->newEntryTransaction();
diff --git a/src/MetalinkParserStateV4Impl.cc b/src/MetalinkParserStateV4Impl.cc
index ed558ee0..fae41831 100644
--- a/src/MetalinkParserStateV4Impl.cc
+++ b/src/MetalinkParserStateV4Impl.cc
@@ -97,7 +97,7 @@ void MetalinkMetalinkParserStateV4::beginElement
if(nsUri == METALINK4_NAMESPACE_URI && localname == FILE) {
std::vector<XmlAttr>::const_iterator itr = findAttr(attrs, NAME);
if(itr != attrs.end()) {
- if(util::detectDirTraversal((*itr).value)) {
+ if((*itr).value.empty() || util::detectDirTraversal((*itr).value)) {
stm->setSkipTagState();
} else {
stm->setFileStateV4();