READLINE PATCH REPORT
                          =====================

Readline-Release: 4.3
Patch-ID:  readline43-003

Bug-Reported-by:        Jim Meyering <[email protected]>
Bug-Reference-ID:       <[email protected]>
Bug-Reference-URL:      http://mail.gnu.org/archive/html/bug-bash/2002-09/msg00047.html

Bug-Description:

When in a locale with multibyte characters, the readline display updater
will occasionally cause a segmentation fault when attempting to compute
the length of the first multibyte character on the line.

Patch:

*** ../readline-4.3/mbutil.c    Tue Jun  4 11:54:29 2002
--- mbutil.c    Mon Aug  5 11:20:39 2002
***************
*** 206,210 ****
     {
       /* shorted to compose multibyte char */
!       memset (ps, 0, sizeof(mbstate_t));
       return -2;
     }
--- 206,211 ----
     {
       /* shorted to compose multibyte char */
!       if (ps)
!       memset (ps, 0, sizeof(mbstate_t));
       return -2;
     }
***************
*** 213,217 ****
       /* invalid to compose multibyte char */
       /* initialize the conversion state */
!       memset (ps, 0, sizeof(mbstate_t));
       return -1;
     }
--- 214,219 ----
       /* invalid to compose multibyte char */
       /* initialize the conversion state */
!       if (ps)
!       memset (ps, 0, sizeof(mbstate_t));
       return -1;
     }
***************
*** 226,232 ****
 int
 _rl_compare_chars (buf1, pos1, ps1, buf2, pos2, ps2)
!      char *buf1, *buf2;
!      mbstate_t *ps1, *ps2;
!      int pos1, pos2;
 {
   int i, w1, w2;
--- 228,237 ----
 int
 _rl_compare_chars (buf1, pos1, ps1, buf2, pos2, ps2)
!      char *buf1;
!      int pos1;
!      mbstate_t *ps1;
!      char *buf2;
!      int pos2;
!      mbstate_t *ps2;
 {
   int i, w1, w2;
***************
*** 277,282 ****
         /* clear the state of the byte sequence, because
            in this case effect of mbstate is undefined  */
!         memset (ps, 0, sizeof (mbstate_t));
       }
       else
       pos += tmp;
--- 282,290 ----
         /* clear the state of the byte sequence, because
            in this case effect of mbstate is undefined  */
!         if (ps)
!           memset (ps, 0, sizeof (mbstate_t));
       }
+       else if (tmp == 0)
+       pos++;
       else
       pos += tmp;