]> granicus.if.org Git - mutt/commitdiff
Remove legacy trim_incomplete_mbyte() in the pager.
authorKevin McCarthy <kevin@8t8.us>
Tue, 14 Aug 2018 21:04:05 +0000 (14:04 -0700)
committerKevin McCarthy <kevin@8t8.us>
Tue, 14 Aug 2018 21:04:05 +0000 (14:04 -0700)
Commit 4b1deb57 added the trim_incomplete_mbyte() call, but at
that time, the function was using fgets() into a fixed-sized
buffer.  The function was passing in "blen - 1" to the size
parameter of fgets, so the check for blen-2 was to see if the
buffer was completely filled by the fgets.

Commit d39d9c0c converted to use a dynamic buffer, but the
trim_incomplete_mbyte() was left in.  It now serves no purpose
because the entire line will be read in.  Presumably the buggy
regexp lib should have been fixed by now too.

pager.c

diff --git a/pager.c b/pager.c
index 398e768c38230c4d968d0f1bf3186870916d533e..2a1dae795758a264d49f70842166e89c1c271e24 100644 (file)
--- a/pager.c
+++ b/pager.c
@@ -1033,31 +1033,6 @@ static int grok_ansi(unsigned char *buf, int pos, ansi_attr *a)
   return pos;
 }
 
-/* trim tail of buf so that it contains complete multibyte characters */
-static int
-trim_incomplete_mbyte(unsigned char *buf, size_t len)
-{
-  mbstate_t mbstate;
-  size_t k;
-
-  memset (&mbstate, 0, sizeof (mbstate));
-  for (; len > 0; buf += k, len -= k)
-  {
-    k = mbrtowc (NULL, (char *) buf, len, &mbstate);
-    if (k == (size_t)(-2)) 
-      break; 
-    else if (k == (size_t)(-1) || k == 0)
-    {
-      if (k == (size_t)(-1))
-        memset (&mbstate, 0, sizeof (mbstate));
-      k = 1;
-    }
-  }
-  *buf = '\0';
-
-  return len;
-}
-
 static int
 fill_buffer (FILE *f, LOFF_T *last_pos, LOFF_T offset, unsigned char **buf,
             unsigned char **fmt, size_t *blen, int *buf_ready)
@@ -1081,11 +1056,6 @@ fill_buffer (FILE *f, LOFF_T *last_pos, LOFF_T offset, unsigned char **buf,
 
     safe_realloc (fmt, *blen);
 
-    /* incomplete mbyte characters trigger a segfault in regex processing for
-     * certain versions of glibc. Trim them if necessary. */
-    if (b_read == *blen - 2)
-      b_read -= trim_incomplete_mbyte(*buf, b_read);
-    
     /* copy "buf" to "fmt", but without bold and underline controls */
     p = *buf;
     q = *fmt;