anonymizer_tool: IPv6 sanitization improvements.

This patch whitelists certain special purpose IPv6 subnets and prevents
spurious matches from being treated as scrubbable IPv6 addresses,
as per go/cros_ip_logsanitizer.

BUG=b:111048642
TEST=components_unittests

BUG: 908117
Change-Id: If8ee24aba1ca5ac9a077dcb1cfa88ac9a69807f5
Reviewed-on: https://chromium-review.googlesource.com/c/1424626
Commit-Queue: Garrick Evans <[email protected]>
Reviewed-by: Dominic Battré <[email protected]>
Reviewed-by: Thiemo Nagel <[email protected]>
Auto-Submit: Garrick Evans <[email protected]>
Cr-Commit-Position: refs/heads/master@{#626507}
diff --git a/components/feedback/anonymizer_tool_unittest.cc b/components/feedback/anonymizer_tool_unittest.cc
index 6464e02..190dfad 100644
--- a/components/feedback/anonymizer_tool_unittest.cc
+++ b/components/feedback/anonymizer_tool_unittest.cc
@@ -6,7 +6,6 @@
 
 #include <gtest/gtest.h>
 
-#include "base/stl_util.h"
 #include "base/strings/string_util.h"
 
 namespace feedback {
@@ -132,7 +131,7 @@
   EXPECT_EQ("[<IPv6: 2>]",
             AnonymizeCustomPatterns("[2001:db8:0:0:0:ff00:42:8329]"));
   EXPECT_EQ("[<IPv6: 3>]", AnonymizeCustomPatterns("[2001:db8::ff00:42:8329]"));
-  EXPECT_EQ("[<IPv6: 4>]", AnonymizeCustomPatterns("[::1]"));
+  EXPECT_EQ("[<IPv6: 4>]", AnonymizeCustomPatterns("[aa::bb]"));
   EXPECT_EQ("<IPv4: 1>", AnonymizeCustomPatterns("192.160.0.1"));
 
   EXPECT_EQ("<URL: 1>",
@@ -228,6 +227,10 @@
       "192.169.2.120\n"           // IP address.
       "169.254.0.1\n"             // Link local.
       "169.200.0.1\n"             // IP address.
+      "fe80::\n"                  // Link local.
+      "fe80::ffff\n"              // Link local.
+      "febf:ffff::ffff\n"         // Link local.
+      "fecc::1111\n"              // IP address.
       "224.0.0.24\n"              // Multicast.
       "240.0.0.0\n"               // IP address.
       "255.255.255.255\n"         // Broadcast.
@@ -243,7 +246,30 @@
       "11:11;11::11\n"            // IP address.
       "11::11\n"                  // IP address.
       "11:11:abcdef:0:0:0:0:0\n"  // No PII.
-      "aa:aa:aa:aa:aa:aa";        // MAC address (BSSID).
+      "::\n"                      // Unspecified.
+      "::1\n"                     // Local host.
+      "Instance::Set\n"           // Ignore match, no PII.
+      "Instant::ff\n"             // Ignore match, no PII.
+      "net::ERR_CONN_TIMEOUT\n"   // Ignore match, no PII.
+      "ff01::1\n"                 // All nodes address (interface local).
+      "ff01::2\n"                 // All routers (interface local).
+      "ff01::3\n"                 // Multicast (interface local).
+      "ff02::1\n"                 // All nodes address (link local).
+      "ff02::2\n"                 // All routers (link local).
+      "ff02::3\n"                 // Multicast (link local).
+      "ff02::fb\n"                // mDNSv6 (link local).
+      "ff08::fb\n"                // mDNSv6.
+      "ff0f::101\n"               // All NTP servers.
+      "::ffff:cb0c:10ea\n"        // IPv4-mapped IPV6 (IP address).
+      "::ffff:a0a:a0a\n"          // IPv4-mapped IPV6 (private class A).
+      "::ffff:a0a:a0a\n"          // Intentional duplicate.
+      "::ffff:ac1e:1e1e\n"        // IPv4-mapped IPV6 (private class B).
+      "::ffff:c0a8:640a\n"        // IPv4-mapped IPV6 (private class C).
+      "::ffff:6473:5c01\n"        // IPv4-mapped IPV6 (Chrome).
+      "64:ff9b::a0a:a0a\n"       // IPv4-translated 6to4 IPV6 (private class A).
+      "64:ff9b::6473:5c01\n"     // IPv4-translated 6to4 IPV6 (Chrome).
+      "::0101:ffff:c0a8:640a\n"  // IP address.
+      "aa:aa:aa:aa:aa:aa";       // MAC address (BSSID).
   std::string result =
       "aaaaaaaa [SSID=1]aaaaa\n"
       "aaaaaaaa<URL: 1>\n"
@@ -268,6 +294,10 @@
       "<IPv4: 16>\n"
       "<169.254.0.0/16: 17>\n"
       "<IPv4: 18>\n"
+      "<fe80::/10: 1>\n"
+      "<fe80::/10: 2>\n"
+      "<fe80::/10: 3>\n"
+      "<IPv6: 4>\n"
       "<224.0.0.0/4: 19>\n"
       "<IPv4: 20>\n"
       "255.255.255.255\n"
@@ -280,9 +310,32 @@
       "255.255.259.255\n"
       "255.300.255.255\n"
       "aaaa<IPv4: 28>aaa\n"
-      "11:11;<IPv6: 1>\n"
-      "<IPv6: 1>\n"
+      "11:11;<IPv6: 5>\n"
+      "<IPv6: 5>\n"
       "11:11:abcdef:0:0:0:0:0\n"
+      "::\n"
+      "::1\n"
+      "Instance::Set\n"
+      "Instant::ff\n"
+      "net::ERR_CONN_TIMEOUT\n"
+      "ff01::1\n"
+      "ff01::2\n"
+      "<ff01::/16: 13>\n"
+      "ff02::1\n"
+      "ff02::2\n"
+      "<ff02::/16: 16>\n"
+      "<ff02::/16: 17>\n"
+      "<IPv6: 18>\n"
+      "<IPv6: 19>\n"
+      "<IPv6: 20>\n"
+      "<M 10.0.0.0/8: 21>\n"
+      "<M 10.0.0.0/8: 21>\n"
+      "<M 172.16.0.0/12: 22>\n"
+      "<M 192.168.0.0/16: 23>\n"
+      "<M 100.115.92.1: 24>\n"
+      "<T 10.0.0.0/8: 25>\n"
+      "<T 100.115.92.1: 26>\n"
+      "<IPv6: 27>\n"
       "aa:aa:aa:00:00:01";
   EXPECT_EQ(result, anonymizer_.Anonymize(data));
 }