libpurple/protocols/silc/ops.c

branch
release-2.x.y
changeset 32045
69372ee4f474
parent 30708
535bec1e66fb
child 32063
fa8d4132d071
child 32635
e5450a0ecde6
--- a/libpurple/protocols/silc/ops.c	Sun Sep 11 04:18:46 2011 +0000
+++ b/libpurple/protocols/silc/ops.c	Fri Sep 30 01:31:04 2011 +0000
@@ -408,9 +408,16 @@
 	}
 
 	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_im(gc, sender->nickname, tmp, 0, time(NULL));
+		g_free(salvaged);
 		g_free(tmp);
 	}
 }

mercurial