Mercurial > pidgin
diff libpurple/protocols/silc/ops.c @ 32378:dd84029b4d03
Fix another possible remote crash bug in SILC.
This is the same change that Ethan made in 7eb1f6d56cc58bbb5b56b7df53955d36b9b419b8,
but to a different function. Refs #14636
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Tue, 06 Dec 2011 06:50:18 +0000 |
parents | d9d33a4b5632 |
children | 3ed4800c5e17 |
line wrap: on
line diff
--- a/libpurple/protocols/silc/ops.c Tue Dec 06 06:47:37 2011 +0000 +++ b/libpurple/protocols/silc/ops.c Tue Dec 06 06:50:18 2011 +0000 @@ -332,10 +332,17 @@ } if (flags & SILC_MESSAGE_FLAG_UTF8) { - tmp = g_markup_escape_text((const char *)message, -1); + const char *msg = (const char *)message; + char *salvaged = NULL; + if (!g_utf8_validate((const char *)message, -1, NULL)) { + salvaged = purple_utf8_salvage((const char *)message); + msg = salvaged; + } + tmp = g_markup_escape_text(msg, -1); /* Send to Purple */ serv_got_chat_in(gc, purple_conv_chat_get_id(PURPLE_CONV_CHAT(convo)), sender->nickname, 0, tmp, time(NULL)); + g_free(salvaged); g_free(tmp); } }