--- gdm-2.18.0/gui/gdmlogin.c.dont-expect-utf8 2007-04-05 12:02:47.000000000 -0400 +++ gdm-2.18.0/gui/gdmlogin.c 2007-04-05 12:03:24.000000000 -0400 @@ -2042,8 +2042,8 @@ char *label; char *login, *gecos; - login = g_markup_escape_text (usr->login, -1); - gecos = g_markup_escape_text (usr->gecos, -1); + login = gdm_common_text_to_escaped_utf8 (usr->login); + gecos = gdm_common_text_to_escaped_utf8 (usr->gecos); label = g_strdup_printf ("%s\n%s", login, --- gdm-2.18.0/gui/gdmcommon.c.dont-expect-utf8 2007-04-05 11:59:23.000000000 -0400 +++ gdm-2.18.0/gui/gdmcommon.c 2007-04-05 12:02:29.000000000 -0400 @@ -379,6 +379,29 @@ return pixbuf; } +gchar * +gdm_common_text_to_escaped_utf8 (const char *text) +{ + gchar *utf8_string, *escaped_string, *p; + const gchar *q; + + utf8_string = g_strdup (text); + p = utf8_string; + while ((*p != '\0') && + !g_utf8_validate (p, -1, &q)) { + p = (gchar *) q; + *p = '?'; + p++; + } + + g_assert (g_utf8_validate (utf8_string, -1, NULL)); + + escaped_string = g_markup_escape_text (utf8_string, -1); + g_free (utf8_string); + + return escaped_string; +} + gchar * gdm_common_get_config_file (void) { --- gdm-2.18.0/gui/gdmcommon.h.dont-expect-utf8 2007-04-05 11:59:37.000000000 -0400 +++ gdm-2.18.0/gui/gdmcommon.h 2007-04-05 12:00:40.000000000 -0400 @@ -58,6 +58,7 @@ guint max_width, guint max_height); +gchar* gdm_common_text_to_escaped_utf8 (const char *text); gchar* gdm_common_get_config_file (void); gchar* gdm_common_get_custom_config_file (void); gboolean gdm_common_select_time_format (void); --- gdm-2.18.0/gui/greeter/greeter_item_ulist.c.dont-expect-utf8 2007-04-05 11:59:05.000000000 -0400 +++ gdm-2.18.0/gui/greeter/greeter_item_ulist.c 2007-04-05 12:02:09.000000000 -0400 @@ -181,9 +181,9 @@ gboolean active; if (usr->gecos && strcmp (usr->gecos, "") != 0) { - name = g_markup_escape_text (usr->gecos, -1); + name = gdm_common_text_to_escaped_utf8 (usr->gecos); } else { - name = g_markup_escape_text (usr->login, -1); + name = gdm_common_text_to_escaped_utf8 (usr->login); } if (g_hash_table_lookup (displays_hash, usr->login))