From 549ed21ea1eae7379f3d52e7f88d423cee7b938e Mon Sep 17 00:00:00 2001 From: Patrick Griffis Date: Tue, 21 Oct 2025 15:42:54 -0500 Subject: [PATCH] gresolver: Fix loopback detection of IPv6 addresses Previously the len passed to g_socket_address_new_from_native() was only for IPv4 addresses and the constructor would fail. This was reported and discussed here: https://gitlab.gnome.org/GNOME/glib/-/commit/fe0139ee985075f3c12932d7123cb594356e7e9d#note_2581394 --- gio/gthreadedresolver.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/gio/gthreadedresolver.c b/gio/gthreadedresolver.c index 988015b7a..78740b091 100644 --- a/gio/gthreadedresolver.c +++ b/gio/gthreadedresolver.c @@ -292,11 +292,19 @@ check_only_has_loopback_interfaces (void) for (struct ifaddrs *addr = addrs; addr; addr = addr->ifa_next) { struct sockaddr *sa = addr->ifa_addr; + size_t addrlen; GSocketAddress *saddr; if (!sa) continue; - saddr = g_socket_address_new_from_native (sa, sizeof (struct sockaddr)); + if (sa->sa_family == AF_INET) + addrlen = sizeof (struct sockaddr_in); + else if (sa->sa_family == AF_INET6) + addrlen = sizeof (struct sockaddr_in6); + else + continue; + + saddr = g_socket_address_new_from_native (sa, addrlen); if (!saddr) continue;