summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilip Withnall <withnall@endlessm.com>2019-03-22 13:30:43 +0000
committerPhilip Withnall <withnall@endlessm.com>2019-03-22 13:32:14 +0000
commit89416debb0dfea6bb24ee1deb57bb853e1ccf279 (patch)
treef34ed0953a9d77997e765989a604d81f80f8b436
parentabeac84105c60aa60aca14fe6c38ad34bc20af5d (diff)
downloadglib-89416debb0dfea6bb24ee1deb57bb853e1ccf279.tar.gz
gresolver: Convert encoding of gai_strerror() return value
It returns a string in the libc locale, which is not necessarily UTF-8. Convert that to UTF-8 before returning it to the caller. Spotted by Tomasz Miąsko. Signed-off-by: Philip Withnall <withnall@endlessm.com> Fixes: #1732
-rw-r--r--gio/gresolver.c7
-rw-r--r--gio/gthreadedresolver.c13
2 files changed, 9 insertions, 11 deletions
diff --git a/gio/gresolver.c b/gio/gresolver.c
index 607bd830a..7f064322b 100644
--- a/gio/gresolver.c
+++ b/gio/gresolver.c
@@ -343,15 +343,14 @@ handle_ip_address (const char *hostname,
#ifdef G_OS_WIN32
gchar *error_message = g_win32_error_message (WSAHOST_NOT_FOUND);
#else
- const gchar *error_message = gai_strerror (EAI_NONAME);
+ gchar *error_message = g_locale_to_utf8 (gai_strerror (EAI_NONAME), -1, NULL, NULL, NULL);
+ if (error_message == NULL)
+ error_message = g_strdup ("[Invalid UTF-8]");
#endif
g_set_error (error, G_RESOLVER_ERROR, G_RESOLVER_ERROR_NOT_FOUND,
_("Error resolving “%s”: %s"),
hostname, error_message);
-
-#ifdef G_OS_WIN32
g_free (error_message);
-#endif
return TRUE;
}
diff --git a/gio/gthreadedresolver.c b/gio/gthreadedresolver.c
index 46bea14f0..7691b9124 100644
--- a/gio/gthreadedresolver.c
+++ b/gio/gthreadedresolver.c
@@ -157,7 +157,9 @@ do_lookup_by_name (GTask *task,
#ifdef G_OS_WIN32
gchar *error_message = g_win32_error_message (WSAGetLastError ());
#else
- const gchar *error_message = gai_strerror (retval);
+ gchar *error_message = g_locale_to_utf8 (gai_strerror (retval), -1, NULL, NULL, NULL);
+ if (error_message == NULL)
+ error_message = g_strdup ("[Invalid UTF-8]");
#endif
g_task_return_new_error (task,
@@ -165,10 +167,7 @@ do_lookup_by_name (GTask *task,
g_resolver_error_from_addrinfo_error (retval),
_("Error resolving “%s”: %s"),
hostname, error_message);
-
-#ifdef G_OS_WIN32
g_free (error_message);
-#endif
}
if (res)
@@ -323,7 +322,9 @@ do_lookup_by_address (GTask *task,
#ifdef G_OS_WIN32
gchar *error_message = g_win32_error_message (WSAGetLastError ());
#else
- const gchar *error_message = gai_strerror (retval);
+ gchar *error_message = g_locale_to_utf8 (gai_strerror (retval), -1, NULL, NULL, NULL);
+ if (error_message == NULL)
+ error_message = g_strdup ("[Invalid UTF-8]");
#endif
phys = g_inet_address_to_string (address);
@@ -334,9 +335,7 @@ do_lookup_by_address (GTask *task,
phys ? phys : "(unknown)",
error_message);
g_free (phys);
-#ifdef G_OS_WIN32
g_free (error_message);
-#endif
}
}