diff options
author | Edwin Mons <edwin.mons@isode.com> | 2018-10-24 20:40:51 (GMT) |
---|---|---|
committer | Edwin Mons <edwin.mons@isode.com> | 2018-10-25 09:18:39 (GMT) |
commit | 5ce9e19ef0744f530a797c30a82e9723eb7ea306 (patch) | |
tree | f3f59b3e9a7dddff75fd222d15b3492c26bb86be /Swiften/JID/JID.cpp | |
parent | f0b7ffcea9b9983555b0555ea5815a193d1e129c (diff) | |
download | swift-5ce9e19ef0744f530a797c30a82e9723eb7ea306.zip swift-5ce9e19ef0744f530a797c30a82e9723eb7ea306.tar.bz2 |
Strip off trailing dot from domainpart of jid
RFC 6122 specifies that if a domainpart ends in a dot, it must be
stripped off before any other canonicalisation steps are taken.
Unit tests have been added to check that various JID scenarios with a
domain ending in a dot pass or are rejected as expected.
Test-Information:
Unit tests pass on macOS 10.13.
Manual tests in sluift show expected behaviour.
Change-Id: Id6813aaa4422a81bff0a4559eacd6855ef104dc3
Diffstat (limited to 'Swiften/JID/JID.cpp')
-rw-r--r-- | Swiften/JID/JID.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/Swiften/JID/JID.cpp b/Swiften/JID/JID.cpp index a31c19f..fff88e9 100644 --- a/Swiften/JID/JID.cpp +++ b/Swiften/JID/JID.cpp @@ -111,7 +111,12 @@ void JID::nameprepAndSetComponents(const std::string& node, const std::string& d try { node_ = idnConverter->getStringPrepared(node, IDNConverter::XMPPNodePrep); - domain_ = idnConverter->getStringPrepared(domain, IDNConverter::NamePrep); + if (domain.back() == '.') { + domain_ = idnConverter->getStringPrepared(domain.substr(0, domain.size() - 1), IDNConverter::NamePrep); + } + else { + domain_ = idnConverter->getStringPrepared(domain, IDNConverter::NamePrep); + } resource_ = idnConverter->getStringPrepared(resource, IDNConverter::XMPPResourcePrep); } catch (...) { valid_ = false; |