diff options
Diffstat (limited to 'Swiften/JID/JID.cpp')
-rw-r--r-- | Swiften/JID/JID.cpp | 34 |
1 files changed, 25 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 { |