diff --git a/ChangeLog b/ChangeLog index 46043d97..ecc44809 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2010-02-27 Tatsuhiro Tsujikawa + + 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 Discard torrent file if path data in it contains directory 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::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::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();