Fix "IsLoopbackIp" to cover all loopback addresses; not just 127.0.0.1.
The loopback range is 127.0.0.0/8, which is everything from 127.0.0.0 to
127.255.255.255.
BUG=chromium:649118
Review-Url: https://codereview.webrtc.org/2445933003
Cr-Commit-Position: refs/heads/master@{#14807}
diff --git a/webrtc/base/ipaddress.cc b/webrtc/base/ipaddress.cc
index b1d1265..c06a1a7 100644
--- a/webrtc/base/ipaddress.cc
+++ b/webrtc/base/ipaddress.cc
@@ -294,7 +294,7 @@
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 cbe8f26..802b47b 100644
--- a/webrtc/base/ipaddress_unittest.cc
+++ b/webrtc/base/ipaddress_unittest.cc
@@ -575,6 +575,9 @@
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 a8153ee..e99bd34 100644
--- a/webrtc/p2p/base/turnport_unittest.cc
+++ b/webrtc/p2p/base/turnport_unittest.cc
@@ -452,7 +452,9 @@
ipv6 ? kTurnIPv6IntAddr : kTurnIntAddr;
std::vector<rtc::SocketAddress> 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);