From 458f9f42d37117e7ba3be83f9bc759f3630a0887 Mon Sep 17 00:00:00 2001 From: Felix Kauselmann <2039670+selmf@users.noreply.github.com> Date: Fri, 8 Aug 2014 21:19:56 +0200 Subject: [PATCH] Fix for Issue #18 Linux: YACReaderLibrary segfaults on start if an openvpn connection is present --- YACReaderLibrary/server_config_dialog.cpp | 32 ++++++++++++----------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/YACReaderLibrary/server_config_dialog.cpp b/YACReaderLibrary/server_config_dialog.cpp index 571dcc7f..0865e89b 100644 --- a/YACReaderLibrary/server_config_dialog.cpp +++ b/YACReaderLibrary/server_config_dialog.cpp @@ -31,21 +31,23 @@ QList addresses() getifaddrs(&ifAddrStruct); for (ifa = ifAddrStruct; ifa != NULL; ifa = ifa->ifa_next) { - if (ifa ->ifa_addr->sa_family==AF_INET) { // check it is IP4 - // is a valid IP4 Address - tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; - char addressBuffer[INET_ADDRSTRLEN]; - inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); - QString add(addressBuffer); - localAddreses.push_back(QString(addressBuffer)); - //printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); - } else if (ifa->ifa_addr->sa_family==AF_INET6) { // check it is IP6 - // is a valid IP6 Address - tmpAddrPtr=&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; - char addressBuffer[INET6_ADDRSTRLEN]; - inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); - //printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); - } + if (ifa ->ifa_addr) { + if (ifa ->ifa_addr->sa_family==AF_INET) { // check it is IP4 + // is a valid IP4 Address + tmpAddrPtr=&((struct sockaddr_in *)ifa->ifa_addr)->sin_addr; + char addressBuffer[INET_ADDRSTRLEN]; + inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN); + QString add(addressBuffer); + localAddreses.push_back(QString(addressBuffer)); + //printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); + } else if (ifa->ifa_addr->sa_family==AF_INET6) { // check it is IP6 + // is a valid IP6 Address + tmpAddrPtr=&((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr; + char addressBuffer[INET6_ADDRSTRLEN]; + inet_ntop(AF_INET6, tmpAddrPtr, addressBuffer, INET6_ADDRSTRLEN); + //printf("%s IP Address %s\n", ifa->ifa_name, addressBuffer); + } + } } if (ifAddrStruct!=NULL) freeifaddrs(ifAddrStruct); return localAddreses;