Handle invalid UTF-8. (#131218, patch from Matthias Clasen)

Sun Mar 14 13:56:48 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmessages.c (escape_string): Handle invalid
        UTF-8. (#131218, patch from Matthias Clasen)
This commit is contained in:
Owen Taylor 2004-03-14 18:59:33 +00:00 committed by Owen Taylor
parent f0f807c51f
commit 08fc5350bb
7 changed files with 54 additions and 5 deletions

View File

@ -1,3 +1,8 @@
Sun Mar 14 13:56:48 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (escape_string): Handle invalid
UTF-8. (#131218, patch from Matthias Clasen)
Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com> Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com>
* glib/gspawn.c: Use fork1() not fork for * glib/gspawn.c: Use fork1() not fork for

View File

@ -1,3 +1,8 @@
Sun Mar 14 13:56:48 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (escape_string): Handle invalid
UTF-8. (#131218, patch from Matthias Clasen)
Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com> Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com>
* glib/gspawn.c: Use fork1() not fork for * glib/gspawn.c: Use fork1() not fork for

View File

@ -1,3 +1,8 @@
Sun Mar 14 13:56:48 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (escape_string): Handle invalid
UTF-8. (#131218, patch from Matthias Clasen)
Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com> Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com>
* glib/gspawn.c: Use fork1() not fork for * glib/gspawn.c: Use fork1() not fork for

View File

@ -1,3 +1,8 @@
Sun Mar 14 13:56:48 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (escape_string): Handle invalid
UTF-8. (#131218, patch from Matthias Clasen)
Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com> Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com>
* glib/gspawn.c: Use fork1() not fork for * glib/gspawn.c: Use fork1() not fork for

View File

@ -1,3 +1,8 @@
Sun Mar 14 13:56:48 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (escape_string): Handle invalid
UTF-8. (#131218, patch from Matthias Clasen)
Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com> Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com>
* glib/gspawn.c: Use fork1() not fork for * glib/gspawn.c: Use fork1() not fork for

View File

@ -1,3 +1,8 @@
Sun Mar 14 13:56:48 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (escape_string): Handle invalid
UTF-8. (#131218, patch from Matthias Clasen)
Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com> Sun Mar 14 13:23:36 2004 Owen Taylor <otaylor@redhat.com>
* glib/gspawn.c: Use fork1() not fork for * glib/gspawn.c: Use fork1() not fork for

View File

@ -562,7 +562,7 @@ strdup_convert (const gchar *string,
*p < 0x80) *p < 0x80)
g_string_append_c (gstring, *p); g_string_append_c (gstring, *p);
else else
g_string_append_printf (gstring, "\\%03o", *p); g_string_append_printf (gstring, "\\x%02x", (guint)(guchar)*p);
} }
return g_string_free (gstring, FALSE); return g_string_free (gstring, FALSE);
@ -787,7 +787,22 @@ escape_string (GString *string)
{ {
gboolean safe; 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') if (wc == '\r')
{ {
safe = *(p + 1) == '\n'; safe = *(p + 1) == '\n';
@ -866,18 +881,22 @@ g_log_default_handler (const gchar *log_domain,
g_string_append (gstring, "(NULL) message"); g_string_append (gstring, "(NULL) message");
else else
{ {
GString *msg;
const gchar *charset; const gchar *charset;
msg = g_string_new (message);
escape_string (msg);
if (g_get_charset (&charset)) 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 else
{ {
string = strdup_convert (message, charset); string = strdup_convert (msg->str, charset);
g_string_append (gstring, string); g_string_append (gstring, string);
g_free (string); g_free (string);
} }
escape_string (gstring); g_string_free (msg, TRUE);
} }
if (is_fatal) if (is_fatal)
g_string_append (gstring, "\naborting...\n"); g_string_append (gstring, "\naborting...\n");