From 9922016ee44c70eb1c14f647cc4a5ade58a0018c Mon Sep 17 00:00:00 2001 From: deadbeef Date: Thu, 27 Oct 2016 18:30:23 -0700 Subject: [PATCH] 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} --- webrtc/base/ipaddress.cc | 2 +- webrtc/base/ipaddress_unittest.cc | 3 +++ webrtc/p2p/base/turnport_unittest.cc | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) 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);