diff --git a/ChangeLog b/ChangeLog index 086aa83be..0f76e8f73 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sun Mar 14 13:56:48 2004 Owen Taylor + + * glib/gmessages.c (escape_string): Handle invalid + UTF-8. (#131218, patch from Matthias Clasen) + Sun Mar 14 13:23:36 2004 Owen Taylor * glib/gspawn.c: Use fork1() not fork for diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 086aa83be..0f76e8f73 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Sun Mar 14 13:56:48 2004 Owen Taylor + + * glib/gmessages.c (escape_string): Handle invalid + UTF-8. (#131218, patch from Matthias Clasen) + Sun Mar 14 13:23:36 2004 Owen Taylor * glib/gspawn.c: Use fork1() not fork for diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 086aa83be..0f76e8f73 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,8 @@ +Sun Mar 14 13:56:48 2004 Owen Taylor + + * glib/gmessages.c (escape_string): Handle invalid + UTF-8. (#131218, patch from Matthias Clasen) + Sun Mar 14 13:23:36 2004 Owen Taylor * glib/gspawn.c: Use fork1() not fork for diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 086aa83be..0f76e8f73 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Sun Mar 14 13:56:48 2004 Owen Taylor + + * glib/gmessages.c (escape_string): Handle invalid + UTF-8. (#131218, patch from Matthias Clasen) + Sun Mar 14 13:23:36 2004 Owen Taylor * glib/gspawn.c: Use fork1() not fork for diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 086aa83be..0f76e8f73 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Sun Mar 14 13:56:48 2004 Owen Taylor + + * glib/gmessages.c (escape_string): Handle invalid + UTF-8. (#131218, patch from Matthias Clasen) + Sun Mar 14 13:23:36 2004 Owen Taylor * glib/gspawn.c: Use fork1() not fork for diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 086aa83be..0f76e8f73 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Sun Mar 14 13:56:48 2004 Owen Taylor + + * glib/gmessages.c (escape_string): Handle invalid + UTF-8. (#131218, patch from Matthias Clasen) + Sun Mar 14 13:23:36 2004 Owen Taylor * glib/gspawn.c: Use fork1() not fork for diff --git a/glib/gmessages.c b/glib/gmessages.c index bc3871130..4be1d548e 100644 --- a/glib/gmessages.c +++ b/glib/gmessages.c @@ -562,7 +562,7 @@ strdup_convert (const gchar *string, *p < 0x80) g_string_append_c (gstring, *p); else - g_string_append_printf (gstring, "\\%03o", *p); + g_string_append_printf (gstring, "\\x%02x", (guint)(guchar)*p); } return g_string_free (gstring, FALSE); @@ -787,7 +787,22 @@ escape_string (GString *string) { gboolean safe; - wc = g_utf8_get_char (p); + wc = g_utf8_get_char_validated (p, -1); + if (wc == (gunichar)-1 || wc == (gunichar)-2) + { + gchar *tmp; + + g_string_erase (string, p - string->str, 1); + /* Emit invalid UTF-8 as hex escapes + */ + tmp = g_strdup_printf ("\\x%02x", (guint)(guchar)*p); + g_string_insert (string, p - string->str, tmp); + g_free (tmp); + + p += 4; /* Skip over escape sequence */ + + continue; + } if (wc == '\r') { safe = *(p + 1) == '\n'; @@ -866,18 +881,22 @@ g_log_default_handler (const gchar *log_domain, g_string_append (gstring, "(NULL) message"); else { + GString *msg; const gchar *charset; + msg = g_string_new (message); + escape_string (msg); + if (g_get_charset (&charset)) - g_string_append (gstring, message); /* charset is UTF-8 already */ + g_string_append (gstring, msg->str); /* charset is UTF-8 already */ else { - string = strdup_convert (message, charset); + string = strdup_convert (msg->str, charset); g_string_append (gstring, string); g_free (string); } - escape_string (gstring); + g_string_free (msg, TRUE); } if (is_fatal) g_string_append (gstring, "\naborting...\n");