From de06fee5ab107d4535cc2a32e743476017286beb Mon Sep 17 00:00:00 2001 From: Matias Fontanini Date: Mon, 4 Nov 2013 15:53:55 -0300 Subject: [PATCH] Fixed bug triggered when ifaddrs::ifa_addr was null. --- src/network_interface.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/network_interface.cpp b/src/network_interface.cpp index a892699..cb82d57 100644 --- a/src/network_interface.cpp +++ b/src/network_interface.cpp @@ -82,16 +82,18 @@ struct InterfaceInfoCollector { #else const struct sockaddr_ll* addr_ptr = ((struct sockaddr_ll*)addr->ifa_addr); - if(addr->ifa_addr->sa_family == AF_PACKET && addr_ptr->sll_ifindex == iface_id) - info->hw_addr = addr_ptr->sll_addr; - else if(addr->ifa_addr->sa_family == AF_INET && !std::strcmp(addr->ifa_name, iface_name)) { - info->ip_addr = IPv4Address(((struct sockaddr_in *)addr->ifa_addr)->sin_addr.s_addr); - info->netmask = IPv4Address(((struct sockaddr_in *)addr->ifa_netmask)->sin_addr.s_addr); - if((addr->ifa_flags & (IFF_BROADCAST | IFF_POINTOPOINT))) - info->bcast_addr = IPv4Address(((struct sockaddr_in *)addr->ifa_ifu.ifu_broadaddr)->sin_addr.s_addr); - else - info->bcast_addr = 0; - found = true; + if(addr->ifa_addr) { + if(addr->ifa_addr->sa_family == AF_PACKET && addr_ptr->sll_ifindex == iface_id) + info->hw_addr = addr_ptr->sll_addr; + else if(addr->ifa_addr->sa_family == AF_INET && !std::strcmp(addr->ifa_name, iface_name)) { + info->ip_addr = IPv4Address(((struct sockaddr_in *)addr->ifa_addr)->sin_addr.s_addr); + info->netmask = IPv4Address(((struct sockaddr_in *)addr->ifa_netmask)->sin_addr.s_addr); + if((addr->ifa_flags & (IFF_BROADCAST | IFF_POINTOPOINT))) + info->bcast_addr = IPv4Address(((struct sockaddr_in *)addr->ifa_ifu.ifu_broadaddr)->sin_addr.s_addr); + else + info->bcast_addr = 0; + found = true; + } } return found; #endif