vim-patch:9.0.0109: writing over the end of a buffer on stack (#19581)

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 vim/vim#10812)
1eead4cf1d
This commit is contained in:
zeertzjq
2022-07-31 05:48:24 +08:00
committed by GitHub
parent fc5ed5b672
commit 9511faa819
2 changed files with 12 additions and 5 deletions

View File

@@ -2965,12 +2965,11 @@ void spell_suggest(int count)
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.
STRLCPY(wcopy, stp->st_word, MAXWLEN + 1);
if (sug.su_badlen > stp->st_orglen) {
STRLCPY(wcopy + stp->st_wordlen,
sug.su_badptr + stp->st_orglen,
sug.su_badlen - stp->st_orglen + 1);
int el = sug.su_badlen - stp->st_orglen;
if (el > 0 && stp->st_wordlen + el <= MAXWLEN) {
STRLCPY(wcopy + stp->st_wordlen, sug.su_badptr + stp->st_orglen, el + 1);
}
vim_snprintf((char *)IObuff, IOSIZE, "%2d", i + 1);
if (cmdmsg_rl) {

View File

@@ -820,5 +820,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