summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2013-07-22 19:21:29 (GMT)
committerRemko Tronçon <git@el-tramo.be>2013-07-27 12:20:38 (GMT)
commitb45602bcd36fb9d2e7a22998434e31014f072d33 (patch)
tree86eb092f01ea651358288e49173e4e20de117ed3 /Swiften
parentd31fe6a73cf29df1e7bf0edd76c30aa124bb0328 (diff)
downloadswift-contrib-b45602bcd36fb9d2e7a22998434e31014f072d33.zip
swift-contrib-b45602bcd36fb9d2e7a22998434e31014f072d33.tar.bz2
Use nodeprep for nodes and nameprep for domains.
Change-Id: Iafe7f72aa2764c797fec736d4f5605c30254018a
Diffstat (limited to 'Swiften')
-rw-r--r--Swiften/JID/JID.cpp34
-rw-r--r--Swiften/JID/UnitTest/JIDTest.cpp6
2 files changed, 31 insertions, 9 deletions
diff --git a/Swiften/JID/JID.cpp b/Swiften/JID/JID.cpp
index 6af3c33..7b51867 100644
--- a/Swiften/JID/JID.cpp
+++ b/Swiften/JID/JID.cpp
@@ -180,8 +180,7 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d
return;
}
- try {
#ifndef SWIFTEN_CACHE_JID_PREP
- node_ = idnConverter->getStringPrepared(node, IDNConverter::NamePrep);
- domain_ = idnConverter->getStringPrepared(domain, IDNConverter::XMPPNodePrep);
+ node_ = idnConverter->getStringPrepared(node, IDNConverter::XMPPNodePrep);
+ domain_ = idnConverter->getStringPrepared(domain, IDNConverter::NamePrep);
resource_ = idnConverter->getStringPrepared(resource, IDNConverter::XMPPResourcePrep);
#else
@@ -192,5 +191,12 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d
r = nodePrepCache.insert(std::make_pair(node, std::string()));
if (r.second) {
- r.first->second = idnConverter->getStringPrepared(node, IDNConverter::NamePrep);
+ try {
+ r.first->second = idnConverter->getStringPrepared(node, IDNConverter::XMPPNodePrep);
+ }
+ catch (...) {
+ nodePrepCache.erase(r.first);
+ valid_ = false;
+ return;
+ }
}
node_ = r.first->second;
@@ -198,5 +204,12 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d
r = domainPrepCache.insert(std::make_pair(domain, std::string()));
if (r.second) {
- r.first->second = idnConverter->getStringPrepared(domain, IDNConverter::XMPPNodePrep);
+ try {
+ r.first->second = idnConverter->getStringPrepared(domain, IDNConverter::NamePrep);
+ }
+ catch (...) {
+ domainPrepCache.erase(r.first);
+ valid_ = false;
+ return;
+ }
}
domain_ = r.first->second;
@@ -204,6 +217,13 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d
r = resourcePrepCache.insert(std::make_pair(resource, std::string()));
if (r.second) {
+ try {
r.first->second = idnConverter->getStringPrepared(resource, IDNConverter::XMPPResourcePrep);
}
+ catch (...) {
+ resourcePrepCache.erase(r.first);
+ valid_ = false;
+ return;
+ }
+ }
resource_ = r.first->second;
#endif
@@ -214,8 +234,4 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d
}
}
- catch (const std::exception&) {
- valid_ = false;
- }
-}
std::string JID::toString() const {
diff --git a/Swiften/JID/UnitTest/JIDTest.cpp b/Swiften/JID/UnitTest/JIDTest.cpp
index 81d24ea..72ca884 100644
--- a/Swiften/JID/UnitTest/JIDTest.cpp
+++ b/Swiften/JID/UnitTest/JIDTest.cpp
@@ -25,4 +25,5 @@ class JIDTest : public CppUnit::TestFixture
CPPUNIT_TEST(testConstructorWithString_EmptyNode);
CPPUNIT_TEST(testConstructorWithString_IllegalResource);
+ CPPUNIT_TEST(testConstructorWithString_SpacesInNode);
CPPUNIT_TEST(testConstructorWithStrings);
CPPUNIT_TEST(testConstructorWithStrings_EmptyDomain);
@@ -138,4 +139,9 @@ class JIDTest : public CppUnit::TestFixture
}
+ void testConstructorWithString_SpacesInNode() {
+ CPPUNIT_ASSERT(!JID(" alice@wonderland.lit").isValid());
+ CPPUNIT_ASSERT(!JID("alice @wonderland.lit").isValid());
+ }
+
void testConstructorWithStrings() {
JID testling("foo", "bar", "baz");