diff options
Diffstat (limited to 'Swiften/Parser')
-rw-r--r-- | Swiften/Parser/PayloadParsers/PriorityParser.cpp | 8 | ||||
-rw-r--r-- | Swiften/Parser/PayloadParsers/UnitTest/PriorityParserTest.cpp | 15 |
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); |