diff --git a/webrtc/base/ipaddress.cc b/webrtc/base/ipaddress.cc index b1d1265ae4..c06a1a7b05 100644 --- a/webrtc/base/ipaddress.cc +++ b/webrtc/base/ipaddress.cc @@ -294,7 +294,7 @@ bool IPIsAny(const IPAddress& ip) { bool IPIsLoopback(const IPAddress& ip) { switch (ip.family()) { case AF_INET: { - return ip == IPAddress(INADDR_LOOPBACK); + return (ip.v4AddressAsHostOrderInteger() >> 24) == 127; } case AF_INET6: { return ip == IPAddress(in6addr_loopback); diff --git a/webrtc/base/ipaddress_unittest.cc b/webrtc/base/ipaddress_unittest.cc index cbe8f26548..802b47b28e 100644 --- a/webrtc/base/ipaddress_unittest.cc +++ b/webrtc/base/ipaddress_unittest.cc @@ -575,6 +575,9 @@ TEST(IPAddressTest, TestIsLoopback) { EXPECT_FALSE(IPIsLoopback(IPAddress(kIPv4MappedPublicAddr))); EXPECT_TRUE(IPIsLoopback(IPAddress(INADDR_LOOPBACK))); + // Try an address in the loopback range (127.0.0.0/8) other than the typical + // 127.0.0.1. + EXPECT_TRUE(IPIsLoopback(IPAddress(0x7f010203))); EXPECT_TRUE(IPIsLoopback(IPAddress(in6addr_loopback))); } diff --git a/webrtc/p2p/base/turnport_unittest.cc b/webrtc/p2p/base/turnport_unittest.cc index a8153eed26..e99bd34870 100644 --- a/webrtc/p2p/base/turnport_unittest.cc +++ b/webrtc/p2p/base/turnport_unittest.cc @@ -452,7 +452,9 @@ class TurnPortTest : public testing::Test, ipv6 ? kTurnIPv6IntAddr : kTurnIntAddr; std::vector redirect_addresses; - SocketAddress loopback_address(ipv6 ? "::1" : "127.0.0.1", + // Pick an unusual address in the 127.0.0.0/8 range to make sure more than + // 127.0.0.1 is covered. + SocketAddress loopback_address(ipv6 ? "::1" : "127.1.2.3", TURN_SERVER_PORT); redirect_addresses.push_back(loopback_address);