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;