[glib: 1/2] gresolver: Convert encoding of gai_strerror() return value



commit 89416debb0dfea6bb24ee1deb57bb853e1ccf279
Author: Philip Withnall <withnall endlessm com>
Date:   Fri Mar 22 13:30:43 2019 +0000

    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

 gio/gresolver.c         |  7 +++----
 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
     }
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]