summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Nocera <hadess@hadess.net>2016-12-07 17:44:08 +0100
committerBastien Nocera <hadess@hadess.net>2017-01-03 14:35:52 +0100
commit442b7ce899df1c0adbbf51bef40dd09b0fd70a51 (patch)
tree5f607e2ecc6442443e6f10b24a186cff2656d3cd
parent5c566e435e48dadde1106c757ab3d18758cdd17c (diff)
downloadglib-442b7ce899df1c0adbbf51bef40dd09b0fd70a51.tar.gz
resolver: Return error looking up invalid hostnames
Make g_resolver_lookup_by_name() and g_resolver_lookup_by_name_async() error out when invalid hostnames are passed. https://bugzilla.gnome.org/show_bug.cgi?id=772989
-rw-r--r--gio/gresolver.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gio/gresolver.c b/gio/gresolver.c
index 3b4e6c417..3b4f174b3 100644
--- a/gio/gresolver.c
+++ b/gio/gresolver.c
@@ -403,6 +403,13 @@ g_resolver_lookup_by_name (GResolver *resolver,
if (g_hostname_is_non_ascii (hostname))
hostname = ascii_hostname = g_hostname_to_ascii (hostname);
+ if (!hostname)
+ {
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ _("Invalid hostname"));
+ return NULL;
+ }
+
g_resolver_maybe_reload (resolver);
addrs = G_RESOLVER_GET_CLASS (resolver)->
lookup_by_name (resolver, hostname, cancellable, error);
@@ -460,6 +467,19 @@ g_resolver_lookup_by_name_async (GResolver *resolver,
if (g_hostname_is_non_ascii (hostname))
hostname = ascii_hostname = g_hostname_to_ascii (hostname);
+ if (!hostname)
+ {
+ GTask *task;
+
+ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_FAILED,
+ _("Invalid hostname"));
+ task = g_task_new (resolver, cancellable, callback, user_data);
+ g_task_set_source_tag (task, g_resolver_lookup_by_name_async);
+ g_task_return_error (task, error);
+ g_object_unref (task);
+ return;
+ }
+
g_resolver_maybe_reload (resolver);
G_RESOLVER_GET_CLASS (resolver)->
lookup_by_name_async (resolver, hostname, cancellable, callback, user_data);