summaryrefslogtreecommitdiff
path: root/extra/pidgin/pidgin-2.10.0-silc-remote-crash-fix.diff
diff options
context:
space:
mode:
Diffstat (limited to 'extra/pidgin/pidgin-2.10.0-silc-remote-crash-fix.diff')
-rw-r--r--extra/pidgin/pidgin-2.10.0-silc-remote-crash-fix.diff21
1 files changed, 21 insertions, 0 deletions
diff --git a/extra/pidgin/pidgin-2.10.0-silc-remote-crash-fix.diff b/extra/pidgin/pidgin-2.10.0-silc-remote-crash-fix.diff
new file mode 100644
index 000000000..de4b126d0
--- /dev/null
+++ b/extra/pidgin/pidgin-2.10.0-silc-remote-crash-fix.diff
@@ -0,0 +1,21 @@
+============================================================
+--- libpurple/protocols/silc/ops.c 30ab18780af11a53b6564a44c4e8ebfc1a296d78
++++ libpurple/protocols/silc/ops.c 80bd9a7d3faf9e5ef28438647159fe19847e9839
+@@ -408,9 +408,16 @@ silc_private_message(SilcClient client,
+ }
+
+ 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);
+ }
+ }