bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: crash inserting character before a special and a normal one


From: Chet Ramey
Subject: Re: crash inserting character before a special and a normal one
Date: Mon, 21 Apr 2003 10:25:24 -0400

> Machine Type: i386-pc-linux-gnu
> 
> Bash Version: 2.05b
> Patch Level: 0
> Release Status: release
> 
> Description:
> At the prompt : type a special character (eg. euro char.) and a normal
> one.
> then go to the begining of the line and type a normal character.
> It segfaults.

Try this patch:

*** ../bash-2.05b/lib/readline/mbutil.c Tue Jun  4 11:54:29 2002
--- lib/readline/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;

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
( ``Discere est Dolere'' -- chet )

Chet Ramey, ITS, CWRU    chet@po.CWRU.Edu    http://cnswww.cns.cwru.edu/~chet/




reply via email to

[Prev in Thread] Current Thread [Next in Thread]