diff options
author | Philip Withnall <withnall@endlessm.com> | 2019-03-22 13:30:43 +0000 |
---|---|---|
committer | Philip Withnall <withnall@endlessm.com> | 2019-03-22 13:32:14 +0000 |
commit | 89416debb0dfea6bb24ee1deb57bb853e1ccf279 (patch) | |
tree | f34ed0953a9d77997e765989a604d81f80f8b436 | |
parent | abeac84105c60aa60aca14fe6c38ad34bc20af5d (diff) | |
download | glib-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.c | 7 | ||||
-rw-r--r-- | gio/gthreadedresolver.c | 13 |
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 } } |