From 956921e51facfab7e7706257ba5a976d011f97a5 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 24 Apr 2014 09:26:12 +0100 Subject: [PATCH] gresolver: Ensure GThreadedResolver always sets an error if resolution fails It was previously possible for GThreadedResolver to return an empty list and no error in response to a g_resolver_lookup_by_name() call, if it happened that all the addresses returned by getaddrinfo() could not be converted from native addresses to GSocketAddresses. Fix that by setting a G_RESOLVER_ERROR_NOT_FOUND if the returned list is empty. https://bugzilla.gnome.org/show_bug.cgi?id=728776 --- gio/gthreadedresolver.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/gio/gthreadedresolver.c b/gio/gthreadedresolver.c index 8e8d07e..9bb864c 100644 --- a/gio/gthreadedresolver.c +++ b/gio/gthreadedresolver.c @@ -96,9 +96,22 @@ do_lookup_by_name (GTask *task, g_object_unref (sockaddr); } - addresses = g_list_reverse (addresses); - g_task_return_pointer (task, addresses, - (GDestroyNotify)g_resolver_free_addresses); + if (addresses != NULL) + { + addresses = g_list_reverse (addresses); + g_task_return_pointer (task, addresses, + (GDestroyNotify)g_resolver_free_addresses); + } + else + { + /* All addresses failed to be converted to GSocketAddresses. */ + g_task_return_new_error (task, + G_RESOLVER_ERROR, + G_RESOLVER_ERROR_NOT_FOUND, + _("Error resolving '%s': %s"), + hostname, + _("No valid addresses were found")); + } } else { -- 2.7.4