Filter logic for ip leak misses ::ffff:0.0.0.0

The current logic filtering out "any" address is incomplete in the case
when any address in IPv4 converted in IPv6 form is not filtered out.

BUG=
R=juberti@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/44429004

Cr-Commit-Position: refs/heads/master@{#8545}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8545 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/base/ipaddress.cc b/webrtc/base/ipaddress.cc
index 4f311d5..300c69b 100644
--- a/webrtc/base/ipaddress.cc
+++ b/webrtc/base/ipaddress.cc
@@ -275,7 +275,7 @@
     case AF_INET:
       return ip == IPAddress(INADDR_ANY);
     case AF_INET6:
-      return ip == IPAddress(in6addr_any);
+      return ip == IPAddress(in6addr_any) || ip == IPAddress(kV4MappedPrefix);
     case AF_UNSPEC:
       return false;
   }
diff --git a/webrtc/base/ipaddress_unittest.cc b/webrtc/base/ipaddress_unittest.cc
index e847335..7ff6c09 100644
--- a/webrtc/base/ipaddress_unittest.cc
+++ b/webrtc/base/ipaddress_unittest.cc
@@ -552,6 +552,19 @@
   EXPECT_TRUE(IPIsLoopback(IPAddress(in6addr_loopback)));
 }
 
+// Verify that IPIsAny catches all cases of "any" address.
+TEST(IPAddressTest, TestIsAny) {
+  IPAddress addr;
+
+  EXPECT_TRUE(IPFromString(kIPv6AnyAddrString, &addr));
+  EXPECT_TRUE(IPIsAny(addr));
+
+  EXPECT_TRUE(IPFromString(kIPv4AnyAddrString, &addr));
+  EXPECT_TRUE(IPIsAny(addr));
+
+  EXPECT_TRUE(IPIsAny(IPAddress(kIPv4MappedAnyAddr)));
+}
+
 TEST(IPAddressTest, TestNormalized) {
   // Check normalizing a ::ffff:a.b.c.d address.
   IPAddress addr;