]> granicus.if.org Git - neomutt/commitdiff
Fix a CP1255/8-related problem that's caused by a glibc/iconv bug.
authorEdmund GRIMLEY EVANS <edmundo@rano.org>
Sun, 8 Feb 2004 11:41:31 +0000 (11:41 +0000)
committerEdmund GRIMLEY EVANS <edmundo@rano.org>
Sun, 8 Feb 2004 11:41:31 +0000 (11:41 +0000)
charset.c

index 19c3a2b5440c579ab0898a9f608803d29c0b1a7b..18e9cdc5e74cf63ed0622a4512bab99648a15a04 100644 (file)
--- a/charset.c
+++ b/charset.c
@@ -379,18 +379,24 @@ size_t mutt_iconv (iconv_t cd, ICONV_CONST char **inbuf, size_t *inbytesleft,
        if (*t)
          continue;
       }
-      if (outrepl)
+      /* Replace the output */
+      if (!outrepl)
+       outrepl = "?";
+      iconv (cd, 0, 0, &ob, &obl);
+      if (obl)
       {
-       /* Try replacing the output */
        int n = strlen (outrepl);
-       if (n <= obl)
+       if (n > obl)
        {
-         memcpy (ob, outrepl, n);
-         ++ib, --ibl;
-         ob += n, obl -= n;
-         ++ret;
-         continue;
+         outrepl = "?";
+         n = 1;
        }
+       memcpy (ob, outrepl, n);
+       ++ib, --ibl;
+       ob += n, obl -= n;
+       ++ret;
+       iconv (cd, 0, 0, 0, 0); /* for good measure */
+       continue;
       }
     }
     *inbuf = ib, *inbytesleft = ibl;