Fix IPAddress::ToSensitiveString() to avoid dependency on inet_ntop().

Previosly ToSesnsetiveString() wasn't working witn some implementations
of inet_ntop(). Rewrote it to avoid that dependency.

BUG=chromium:577344
R=pthatcher@webrtc.org, tommi@webrtc.org

Review URL: https://codereview.webrtc.org/1584793004 .

Cr-Commit-Position: refs/heads/master@{#11242}
diff --git a/webrtc/base/ipaddress.cc b/webrtc/base/ipaddress.cc
index c85624d..c92f33c 100644
--- a/webrtc/base/ipaddress.cc
+++ b/webrtc/base/ipaddress.cc
@@ -28,8 +28,9 @@
 #include "webrtc/base/ipaddress.h"
 #include "webrtc/base/byteorder.h"
 #include "webrtc/base/checks.h"
-#include "webrtc/base/nethelpers.h"
 #include "webrtc/base/logging.h"
+#include "webrtc/base/nethelpers.h"
+#include "webrtc/base/stringutils.h"
 #include "webrtc/base/win32.h"
 
 namespace rtc {
@@ -158,19 +159,16 @@
       return address;
     }
     case AF_INET6: {
-      // Remove the last 5 groups (80 bits).
-      std::string address = TruncateIP(*this, 128 - 80).ToString();
-
-      // If all three remaining groups are written out explicitly in the string,
-      // remove one of the two trailing colons before appending the stripped
-      // groups as "x"s. There should be max 4 colons (2 between the 3 groups +
-      // 2 trailing) in the truncated address string.
-      size_t number_of_colons = std::count(address.begin(), address.end(), ':');
-      RTC_CHECK_LE(number_of_colons, 4u);
-      if (number_of_colons > 3)
-        address.resize(address.length() - 1);
-
-      return address + "x:x:x:x:x";
+      std::string result;
+      result.resize(INET6_ADDRSTRLEN);
+      in6_addr addr = ipv6_address();
+      size_t len =
+          rtc::sprintfn(&(result[0]), result.size(), "%x:%x:%x:x:x:x:x:x",
+                        (addr.s6_addr[0] << 8) + addr.s6_addr[1],
+                        (addr.s6_addr[2] << 8) + addr.s6_addr[3],
+                        (addr.s6_addr[4] << 8) + addr.s6_addr[5]);
+      result.resize(len);
+      return result;
     }
   }
   return std::string();
diff --git a/webrtc/base/ipaddress_unittest.cc b/webrtc/base/ipaddress_unittest.cc
index e032c9f..62773c1 100644
--- a/webrtc/base/ipaddress_unittest.cc
+++ b/webrtc/base/ipaddress_unittest.cc
@@ -61,7 +61,7 @@
 static const std::string kIPv6PublicAddrAnonymizedString =
     "2401:fa00:4:x:x:x:x:x";
 static const std::string kIPv6PublicAddr2AnonymizedString =
-    "2401::x:x:x:x:x";
+    "2401:0:0:x:x:x:x:x";
 static const std::string kIPv4MappedAnyAddrString = "::ffff:0:0";
 static const std::string kIPv4MappedRFC1918AddrString = "::ffff:c0a8:701";
 static const std::string kIPv4MappedLoopbackAddrString = "::ffff:7f00:1";