summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwolfbeast <mcwerewolf@gmail.com>2017-08-11 14:18:38 +0200
committerwolfbeast <mcwerewolf@gmail.com>2018-02-07 09:41:01 +0100
commit646d68be64b1c5ec8e12aff0d22a76433fcc5703 (patch)
tree511aab535c58d5d57ba3ea52fb0e80d22f8c6d56
parentb2314b1ee9ba5d32123132ad0002e90aca821c29 (diff)
downloadUXP-646d68be64b1c5ec8e12aff0d22a76433fcc5703.tar
UXP-646d68be64b1c5ec8e12aff0d22a76433fcc5703.tar.gz
UXP-646d68be64b1c5ec8e12aff0d22a76433fcc5703.tar.lz
UXP-646d68be64b1c5ec8e12aff0d22a76433fcc5703.tar.xz
UXP-646d68be64b1c5ec8e12aff0d22a76433fcc5703.zip
Limit displayed user/host strings to sane lengths.
-rw-r--r--netwerk/protocol/http/nsHttpChannelAuthProvider.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp b/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
index 9a2275287..d04f47ddc 100644
--- a/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
+++ b/netwerk/protocol/http/nsHttpChannelAuthProvider.cpp
@@ -53,6 +53,9 @@ namespace net {
#define HTTP_AUTH_NEGOTIATE_INSECURE 6
#define HTTP_AUTH_NEGOTIATE_SECURE 7
+#define MAX_DISPLAYED_USER_LENGTH 64
+#define MAX_DISPLAYED_HOST_LENGTH 64
+
static void
GetOriginAttributesSuffix(nsIChannel* aChan, nsACString &aSuffix)
{
@@ -1512,6 +1515,33 @@ nsHttpChannelAuthProvider::ConfirmAuth(const nsString &bundleKey,
return true;
NS_ConvertUTF8toUTF16 ucsHost(host), ucsUser(user);
+
+ size_t userLength = ucsUser.Length();
+ if (userLength > MAX_DISPLAYED_USER_LENGTH) {
+ size_t desiredLength = MAX_DISPLAYED_USER_LENGTH;
+ // Don't cut off right before a low surrogate. Just include it.
+ if (NS_IS_LOW_SURROGATE(ucsUser[desiredLength])) {
+ desiredLength++;
+ }
+ ucsUser.Replace(desiredLength, userLength - desiredLength,
+ nsContentUtils::GetLocalizedEllipsis());
+ }
+
+ size_t hostLen = ucsHost.Length();
+ if (hostLen > MAX_DISPLAYED_HOST_LENGTH) {
+ size_t cutPoint = hostLen - MAX_DISPLAYED_HOST_LENGTH;
+ // Likewise, don't cut off right before a low surrogate here.
+ // Keep the low surrogate
+ if (NS_IS_LOW_SURROGATE(ucsHost[cutPoint])) {
+ cutPoint--;
+ }
+ // It's possible cutPoint was 1 and is now 0. Only insert the ellipsis
+ // if we're actually removing anything.
+ if (cutPoint > 0) {
+ ucsHost.Replace(0, cutPoint, nsContentUtils::GetLocalizedEllipsis());
+ }
+ }
+
const char16_t *strs[2] = { ucsHost.get(), ucsUser.get() };
nsXPIDLString msg;