diff options
| author | Richard Maudsley <richard.maudsley@isode.com> | 2014-07-17 09:46:50 (GMT) |
|---|---|---|
| committer | Swift Review <review@swift.im> | 2014-08-10 11:08:27 (GMT) |
| commit | 8ec22a9c5591584fd1725ed028d714c51b7509d3 (patch) | |
| tree | 3687e7023696c9e790a24fd54b7d04f14ac58ab2 /Swiften/JID/JID.cpp | |
| parent | 5e9e715e49a5ddb6ce9c76ec61e7ecfd6eacdb58 (diff) | |
| download | swift-contrib-8ec22a9c5591584fd1725ed028d714c51b7509d3.zip swift-contrib-8ec22a9c5591584fd1725ed028d714c51b7509d3.tar.bz2 | |
Fix invalid characters being allowed in JID domains
Test-Information:
Prepare valid and invalid JIDs and make sure that isValid() is reported correctly. Added unit tests.
Change-Id: Ic4d86f8b6ea9defc517ada2f8e3cc54979237cf4
Diffstat (limited to 'Swiften/JID/JID.cpp')
| -rw-r--r-- | Swiften/JID/JID.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Swiften/JID/JID.cpp b/Swiften/JID/JID.cpp index 0f2d8d1..fcd49f9 100644 --- a/Swiften/JID/JID.cpp +++ b/Swiften/JID/JID.cpp @@ -145,71 +145,71 @@ JID::JID(const std::string& node, const std::string& domain) : valid_(true), has nameprepAndSetComponents(node, domain, ""); } JID::JID(const std::string& node, const std::string& domain, const std::string& resource) : valid_(true), hasResource_(true) { nameprepAndSetComponents(node, domain, resource); } void JID::initializeFromString(const std::string& jid) { if (String::beginsWith(jid, '@')) { valid_ = false; return; } std::string bare, resource; size_t slashIndex = jid.find('/'); if (slashIndex != jid.npos) { hasResource_ = true; bare = jid.substr(0, slashIndex); resource = jid.substr(slashIndex + 1, jid.npos); } else { hasResource_ = false; bare = jid; } std::pair<std::string,std::string> nodeAndDomain = String::getSplittedAtFirst(bare, '@'); if (nodeAndDomain.second.empty()) { nameprepAndSetComponents("", nodeAndDomain.first, resource); } else { nameprepAndSetComponents(nodeAndDomain.first, nodeAndDomain.second, resource); } } void JID::nameprepAndSetComponents(const std::string& node, const std::string& domain, const std::string& resource) { - if (domain.empty()) { + if (domain.empty() || !idnConverter->getIDNAEncoded(domain)) { valid_ = false; return; } #ifndef SWIFTEN_CACHE_JID_PREP node_ = idnConverter->getStringPrepared(node, IDNConverter::XMPPNodePrep); domain_ = idnConverter->getStringPrepared(domain, IDNConverter::NamePrep); resource_ = idnConverter->getStringPrepared(resource, IDNConverter::XMPPResourcePrep); #else boost::mutex::scoped_lock lock(namePrepCacheMutex); std::pair<PrepCache::iterator, bool> r; r = nodePrepCache.insert(std::make_pair(node, std::string())); if (r.second) { try { r.first->second = idnConverter->getStringPrepared(node, IDNConverter::XMPPNodePrep); } catch (...) { nodePrepCache.erase(r.first); valid_ = false; return; } } node_ = r.first->second; r = domainPrepCache.insert(std::make_pair(domain, std::string())); if (r.second) { try { r.first->second = idnConverter->getStringPrepared(domain, IDNConverter::NamePrep); } catch (...) { domainPrepCache.erase(r.first); valid_ = false; return; } |
Swift