diff options
author | Remko Tronçon <git@el-tramo.be> | 2010-10-12 16:20:23 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2010-10-12 16:20:44 (GMT) |
commit | eb788bf484f4d11f524473986bf19d1a80f522bc (patch) | |
tree | ec5c4a32dbc7169414e05fd13457578762be9443 /Swiften/Parser | |
parent | 3a876559c905f324e4bc91cec6c58d93160a5a9d (diff) | |
download | swift-eb788bf484f4d11f524473986bf19d1a80f522bc.zip swift-eb788bf484f4d11f524473986bf19d1a80f522bc.tar.bz2 |
Don't assert on incorrect priorities.
Release-Notes: We don't crash anymore when a contact has set an incorrect priority
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); |