summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften')
-rw-r--r--Swiften/Parser/PayloadParsers/PriorityParser.cpp8
-rw-r--r--Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp15
2 files changed, 18 insertions, 5 deletions
diff --git a/Swiften/Parser/PayloadParsers/PriorityParser.cpp b/Swiften/Parser/PayloadParsers/PriorityParser.cpp
index 7bf81bf..8872977 100644
--- a/Swiften/Parser/PayloadParsers/PriorityParser.cpp
+++ b/Swiften/Parser/PayloadParsers/PriorityParser.cpp
@@ -20,7 +20,13 @@ void PriorityParser::handleStartElement(const String&, const String&, const Attr
void PriorityParser::handleEndElement(const String&, const String&) {
--level_;
if (level_ == 0) {
- getPayloadInternal()->setPriority(boost::lexical_cast<int>(text_));
+ int priority = 0;
+ try {
+ priority = boost::lexical_cast<int>(text_);
+ }
+ catch (boost::bad_lexical_cast& e) {
+ }
+ getPayloadInternal()->setPriority(priority);
}
}
diff --git a/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp b/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp
index 7c18762..b340739 100644
--- a/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp
+++ b/Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp
@@ -12,15 +12,13 @@
using namespace Swift;
-class PriorityParserTest : public CppUnit::TestFixture
-{
+class PriorityParserTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(PriorityParserTest);
CPPUNIT_TEST(testParse);
+ CPPUNIT_TEST(testParse_Invalid);
CPPUNIT_TEST_SUITE_END();
public:
- PriorityParserTest() {}
-
void testParse() {
PayloadsParserTester parser;
@@ -29,6 +27,15 @@ class PriorityParserTest : public CppUnit::TestFixture
Priority* payload = dynamic_cast<Priority*>(parser.getPayload().get());
CPPUNIT_ASSERT_EQUAL(-120, payload->getPriority());
}
+
+ void testParse_Invalid() {
+ PayloadsParserTester parser;
+
+ CPPUNIT_ASSERT(parser.parse("<priority>invalid</priority>"));
+
+ Priority* payload = dynamic_cast<Priority*>(parser.getPayload().get());
+ CPPUNIT_ASSERT_EQUAL(0, payload->getPriority());
+ }
};
CPPUNIT_TEST_SUITE_REGISTRATION(PriorityParserTest);