bug-bash
[Top][All Lists]
Advanced

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

Re: Segmentation fault in lib/readline/text.c rl_change_case


From: Chet Ramey
Subject: Re: Segmentation fault in lib/readline/text.c rl_change_case
Date: Thu, 31 Jan 2019 15:20:23 -0500
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.4.0

On 1/6/19 9:25 PM, Eduardo A. Bustamante López wrote:
> I found the issue with AFL (http://lcamtuf.coredump.cx/afl/).
> 
> The crash itself happens due to the following:
> 
> dualbus@system76-pc:~/src/gnu/bash$ cat -n lib/readline/text.c | sed -n 
> '1455,1460p'
>   1455                      mlen = wcrtomb (mb, nwc, &mps);   // <- mlen is 
> -1, due to `nwc' being an invalid character.
>   1456                      if (mlen > 0)
>   1457                        mb[mlen] = '\0';
>   1458                      /* what to do if m != mlen? adjust below */
>   1459                      /* m == length of old char, mlen == length of new 
> char */
>   1460                      s = rl_line_buffer + start;
> 
> dualbus@system76-pc:~/src/gnu/bash$ cat -n lib/readline/text.c | sed -n 
> '1475,1480p'
>   1475                          rl_extend_line_buffer (mlen - m + 1);
>   1476                          memmove (s + mlen, s + m, (e - s) - m);
>   1477                          memcpy (s, mb, mlen); // <- mlen is negative 
> here, thus it's an invalid `memcpy'
>   1478                          next += mlen - m;     /* next char changes */
>   1479                          end += mlen - m;      /* end of word changes 
> */
>   1480                          rl_end += mlen - m;   /* end of line changes 
> */
> 
> I'm not really sure how to fix this problem. I worked around it by changing 
> the
> condition in L1456 to just return early from the function.

It's interesting that towupper returns a valid wide character in the
zh_CN.gbk locale, but one that can't be converted back to a multibyte
byte sequence. I didn't really think that was possible. I'll figure out
some workaround that will probably involve reverting back to the original
character.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/



reply via email to

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