diff --git a/rtc_base/network.cc b/rtc_base/network.cc index a59574303d..4be6eed759 100644 --- a/rtc_base/network.cc +++ b/rtc_base/network.cc @@ -619,10 +619,6 @@ void BasicNetworkManager::ConvertIfAddrs( if (!cursor->ifa_addr || !cursor->ifa_netmask) { continue; } - // Skip ones which are down. - if (!(cursor->ifa_flags & IFF_RUNNING)) { - continue; - } // Skip unknown family. if (cursor->ifa_addr->sa_family != AF_INET && cursor->ifa_addr->sa_family != AF_INET6) { @@ -633,6 +629,12 @@ void BasicNetworkManager::ConvertIfAddrs( if (!ifaddrs_converter->ConvertIfAddrsToIPAddress(cursor, &ip, &mask)) { continue; } + // Skip ones which are down. + if (!(cursor->ifa_flags & IFF_RUNNING)) { + RTC_LOG(LS_INFO) << "Skip interface because of not IFF_RUNNING: " + << ip.ToSensitiveString(); + continue; + } // Special case for IPv6 address. if (cursor->ifa_addr->sa_family == AF_INET6) { diff --git a/rtc_base/network_unittest.cc b/rtc_base/network_unittest.cc index 9f76d5b442..1579f800b6 100644 --- a/rtc_base/network_unittest.cc +++ b/rtc_base/network_unittest.cc @@ -879,6 +879,7 @@ TEST_F(NetworkTest, TestConvertIfAddrsNotRunning) { memset(&list, 0, sizeof(list)); list.ifa_name = const_cast("test_iface"); sockaddr ifa_addr; + ifa_addr.sa_family = AF_UNSPEC; sockaddr ifa_netmask; list.ifa_addr = &ifa_addr; list.ifa_netmask = &ifa_netmask; @@ -891,6 +892,21 @@ TEST_F(NetworkTest, TestConvertIfAddrsNotRunning) { EXPECT_TRUE(result.empty()); } +TEST_F(NetworkTest, TestConvertIfAddrsGetsNullAddr) { + ifaddrs list; + memset(&list, 0, sizeof(list)); + list.ifa_name = const_cast("test_iface"); + list.ifa_addr = nullptr; + list.ifa_netmask = nullptr; + + std::vector> result; + PhysicalSocketServer socket_server; + BasicNetworkManager manager(&socket_server); + manager.StartUpdating(); + CallConvertIfAddrs(manager, &list, true, &result); + EXPECT_TRUE(result.empty()); +} + // Tests that the network type can be determined from the network monitor when // it would otherwise be unknown. TEST_F(NetworkTest, TestGetAdapterTypeFromNetworkMonitor) {