GNOME Bugzilla – Bug 710606
Segfault in arv_gv_discover_socket_list_new when non INET interface available
Last modified: 2013-10-22 14:42:45 UTC
Some net interfaces do not have a valid ifa_addr pointer (for example socket can). This leads to a segfault when running device discovery. This can be fixed in in arvgvinterface.c by adding an additional check for (ifap_iter->ifa_addr != NULL) && in arv_gv_discover_socket_list_new (void) giving static ArvGvDiscoverSocketList * arv_gv_discover_socket_list_new (void) { ArvGvDiscoverSocketList *socket_list; GSList *iter; struct ifaddrs *ifap = NULL; struct ifaddrs *ifap_iter; int i; socket_list = g_new0 (ArvGvDiscoverSocketList, 1); if (getifaddrs (&ifap) < 0) return socket_list; for (ifap_iter = ifap; ifap_iter != NULL; ifap_iter = ifap_iter->ifa_next) { if ((ifap_iter->ifa_flags & IFF_UP) != 0 && (ifap_iter->ifa_flags & IFF_POINTOPOINT) == 0 && (ifap_iter->ifa_addr != NULL) && (ifap_iter->ifa_addr->sa_family == AF_INET)) { ArvGvDiscoverSocket *discover_socket = g_new0 (ArvGvDiscoverSocket, 1); GSocketAddress *socket_address; GInetAddress *inet_address; char *inet_address_string; GError *error = NULL;
Thanks for your patch. It's now available in git master. https://git.gnome.org/browse/aravis/commit/?id=a668657793ef183748b42c1ed44ac0454f87c87d