]> granicus.if.org Git - mutt/commitdiff
Filter out bidi marks in rfc2047 and rfc2231 encoding. (see #3827)
authorKevin McCarthy <kevin@8t8.us>
Wed, 30 Mar 2016 20:16:20 +0000 (13:16 -0700)
committerKevin McCarthy <kevin@8t8.us>
Wed, 30 Mar 2016 20:16:20 +0000 (13:16 -0700)
Filter out U+200F RIGHT-TO-LEFT MARK and U+200E LEFT-TO-RIGHT MARK in
rfc2047 and 2231 encoded fields.  GNU Screen has a bug that corrupts
the display, and can cause the wrong email to appear to be selected in
the index.  Until screen fixes the issue, filter it out in mutt.

mbyte.c

diff --git a/mbyte.c b/mbyte.c
index fb96a71479a5d65ae32fdb48b81ce6d6dae1d938..470686c9c25760688e5be297a17db29791887f91 100644 (file)
--- a/mbyte.c
+++ b/mbyte.c
@@ -548,6 +548,14 @@ int mutt_filter_unprintable (char **s)
     }
     if (!IsWPrint (wc))
       wc = '?';
+    /* HACK:
+     * Work around a gnu screen bug. See ticket #3827.
+     * Filter out the RIGHT-TO-LEFT and LEFT-TO-RIGHT bidi marks because
+     * they result in screen corruption.
+     */
+    else if (Charset_is_utf8 &&
+             ((wc == (wchar_t)0x200f) || (wc == (wchar_t)0x200e)))
+      wc = '?';
     k2 = wcrtomb (scratch, wc, &mbstate2);
     scratch[k2] = '\0';
     mutt_buffer_addstr (b, scratch);