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;