forked from aniani/vim
patch 9.0.0109: writing over the end of a buffer on stack
Problem: Writing over the end of a buffer on stack when making list of spell suggestions. Solution: Make sure suggested word is not too long. (closes #10812)
This commit is contained in:
parent
5f6cae8b8a
commit
1eead4cf1d
@ -592,15 +592,17 @@ spell_suggest(int count)
|
||||
msg_scroll = TRUE;
|
||||
for (i = 0; i < sug.su_ga.ga_len; ++i)
|
||||
{
|
||||
int el;
|
||||
|
||||
stp = &SUG(sug.su_ga, i);
|
||||
|
||||
// The suggested word may replace only part of the bad word, add
|
||||
// the not replaced part.
|
||||
// the not replaced part. But only when it's not getting too long.
|
||||
vim_strncpy(wcopy, stp->st_word, MAXWLEN);
|
||||
if (sug.su_badlen > stp->st_orglen)
|
||||
el = sug.su_badlen - stp->st_orglen;
|
||||
if (el > 0 && stp->st_wordlen + el <= MAXWLEN)
|
||||
vim_strncpy(wcopy + stp->st_wordlen,
|
||||
sug.su_badptr + stp->st_orglen,
|
||||
sug.su_badlen - stp->st_orglen);
|
||||
sug.su_badptr + stp->st_orglen, el);
|
||||
vim_snprintf((char *)IObuff, IOSIZE, "%2d", i + 1);
|
||||
#ifdef FEAT_RIGHTLEFT
|
||||
if (cmdmsg_rl)
|
||||
|
@ -819,5 +819,13 @@ func Test_check_empty_line()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func Test_spell_suggest_too_long()
|
||||
" this was creating a word longer than MAXWLEN
|
||||
new
|
||||
call setline(1, 'a' .. repeat("\u0333", 150))
|
||||
norm! z=
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
@ -735,6 +735,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
109,
|
||||
/**/
|
||||
108,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user