From 59ae5ff31029b88f7334838d3b8f5eef9956f464 Mon Sep 17 00:00:00 2001 From: "guoweis@webrtc.org" Date: Sun, 1 Mar 2015 23:45:16 +0000 Subject: [PATCH] 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 --- webrtc/base/ipaddress.cc | 2 +- webrtc/base/ipaddress_unittest.cc | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/webrtc/base/ipaddress.cc b/webrtc/base/ipaddress.cc index 4f311d5a29..300c69bcdc 100644 --- a/webrtc/base/ipaddress.cc +++ b/webrtc/base/ipaddress.cc @@ -275,7 +275,7 @@ bool IPIsAny(const IPAddress& ip) { 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 e8473351cb..7ff6c095fa 100644 --- a/webrtc/base/ipaddress_unittest.cc +++ b/webrtc/base/ipaddress_unittest.cc @@ -552,6 +552,19 @@ TEST(IPAddressTest, TestIsLoopback) { 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;