fix crash under linux IPV6 in NetworkInterface::list() if currIface->ifa_addr is NULL

This commit is contained in:
Marian Krivos
2012-07-31 20:03:36 +00:00
parent bd401297e7
commit 8ea4fa9c36

View File

@@ -903,19 +903,22 @@ NetworkInterface::NetworkInterfaceList NetworkInterface::list()
IPAddress addr; IPAddress addr;
bool haveAddr = false; bool haveAddr = false;
int ifIndex(-1); int ifIndex(-1);
switch (currIface->ifa_addr->sa_family) if (currIface->ifa_addr)
{ {
case AF_INET6: switch (currIface->ifa_addr->sa_family)
ifIndex = if_nametoindex(currIface->ifa_name); {
addr = IPAddress(&reinterpret_cast<const struct sockaddr_in6*>(currIface->ifa_addr)->sin6_addr, sizeof(struct in6_addr), ifIndex); case AF_INET6:
haveAddr = true; ifIndex = if_nametoindex(currIface->ifa_name);
break; addr = IPAddress(&reinterpret_cast<const struct sockaddr_in6*>(currIface->ifa_addr)->sin6_addr, sizeof(struct in6_addr), ifIndex);
case AF_INET: haveAddr = true;
addr = IPAddress(*(currIface->ifa_addr)); break;
haveAddr = true; case AF_INET:
break; addr = IPAddress(*(currIface->ifa_addr));
default: haveAddr = true;
break; break;
default:
break;
}
} }
if (haveAddr) if (haveAddr)
{ {