summaryrefslogtreecommitdiff
path: root/louloulibs/xmpp
diff options
context:
space:
mode:
authorlouiz’ <louiz@louiz.org>2016-06-02 16:03:28 +0200
committerlouiz’ <louiz@louiz.org>2016-06-02 16:03:28 +0200
commita641a26327e04016dfd62e1cb1f2141b9364631b (patch)
tree53fddab4e3b747e586985c5fa341162a70964f9b /louloulibs/xmpp
parent62c88a62ae855b733259d7c346e8dfbc454aaa6e (diff)
downloadbiboumi-a641a26327e04016dfd62e1cb1f2141b9364631b.tar.gz
biboumi-a641a26327e04016dfd62e1cb1f2141b9364631b.tar.bz2
biboumi-a641a26327e04016dfd62e1cb1f2141b9364631b.tar.xz
biboumi-a641a26327e04016dfd62e1cb1f2141b9364631b.zip
Check the length of the JID parts when copying into the jidprep buffer
We trust the XMPP server, but maybe not enough to not check that
Diffstat (limited to 'louloulibs/xmpp')
-rw-r--r--louloulibs/xmpp/jid.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/louloulibs/xmpp/jid.cpp b/louloulibs/xmpp/jid.cpp
index dcd7012..7b62f3e 100644
--- a/louloulibs/xmpp/jid.cpp
+++ b/louloulibs/xmpp/jid.cpp
@@ -47,7 +47,7 @@ std::string jidprep(const std::string& original)
Jid jid(original);
char local[max_jid_part_len] = {};
- memcpy(local, jid.local.data(), jid.local.size());
+ memcpy(local, jid.local.data(), std::min(max_jid_part_len, jid.local.size()));
Stringprep_rc rc = static_cast<Stringprep_rc>(::stringprep(local, max_jid_part_len,
static_cast<Stringprep_profile_flags>(0), stringprep_xmpp_nodeprep));
if (rc != STRINGPREP_OK)
@@ -57,7 +57,7 @@ std::string jidprep(const std::string& original)
}
char domain[max_jid_part_len] = {};
- memcpy(domain, jid.domain.data(), jid.domain.size());
+ memcpy(domain, jid.domain.data(), std::min(max_jid_part_len, jid.domain.size()));
rc = static_cast<Stringprep_rc>(::stringprep(domain, max_jid_part_len,
static_cast<Stringprep_profile_flags>(0), stringprep_nameprep));
if (rc != STRINGPREP_OK)
@@ -81,7 +81,7 @@ std::string jidprep(const std::string& original)
// Otherwise, also process the resource part
char resource[max_jid_part_len] = {};
- memcpy(resource, jid.resource.data(), jid.resource.size());
+ memcpy(resource, jid.resource.data(), std::min(max_jid_part_len, jid.resource.size()));
rc = static_cast<Stringprep_rc>(::stringprep(resource, max_jid_part_len,
static_cast<Stringprep_profile_flags>(0), stringprep_xmpp_resourceprep));
if (rc != STRINGPREP_OK)