summaryrefslogtreecommitdiff
path: root/src/MetalinkParserStateMachine.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-03-02 14:07:30 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-03-02 14:07:30 +0000
commitba78b6f16712c40917312412c91f5e0c11742e12 (patch)
treee6773b0b12914fc372002d8de2a4c6d67a91112e /src/MetalinkParserStateMachine.cc
parenteb32f5647923afdc30cb170b84424230714c411f (diff)
2010-03-02 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added strict attribute validation for metalink4. When specification violation is found, discard the whole document. * src/ExpatMetalinkProcessor.cc * src/MetalinkParserStateMachine.cc * src/MetalinkParserStateMachine.h * src/MetalinkParserStateV4Impl.cc * src/XML2SAXMetalinkProcessor.cc * test/Makefile.am * test/MetalinkProcessorTest.cc * test/metalink4-attrs.xml: Removed * test/metalink4-dirtraversal.xml: Removed
Diffstat (limited to 'src/MetalinkParserStateMachine.cc')
-rw-r--r--src/MetalinkParserStateMachine.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/MetalinkParserStateMachine.cc b/src/MetalinkParserStateMachine.cc
index 103662c9..2f114d4a 100644
--- a/src/MetalinkParserStateMachine.cc
+++ b/src/MetalinkParserStateMachine.cc
@@ -33,6 +33,10 @@
*/
/* copyright --> */
#include "MetalinkParserStateMachine.h"
+
+#include <sstream>
+#include <iterator>
+
#include "MetalinkParserStateImpl.h"
#include "MetalinkParserStateV3Impl.h"
#include "MetalinkParserStateV4Impl.h"
@@ -514,4 +518,21 @@ bool MetalinkParserStateMachine::needsCharactersBuffering() const
return _stateStack.top()->needsCharactersBuffering();
}
+void MetalinkParserStateMachine::logError(const std::string& log)
+{
+ if(_errors.size() < 10) {
+ _errors.push_back(log);
+ }
+}
+
+std::string MetalinkParserStateMachine::getErrorString() const
+{
+ std::stringstream error;
+ error << "Specification violation: ";
+ std::copy(_errors.begin(), _errors.end(),
+ std::ostream_iterator<std::string>(error, ", "));
+ return error.str();
+}
+
+
} // namespace aria2