forked from aniani/vim
patch 8.2.5072: using uninitialized value and freed memory in spell command
Problem: Using uninitialized value and freed memory in spell command. Solution: Initialize "attr". Check for empty line early.
This commit is contained in:
10
src/spell.c
10
src/spell.c
@@ -1275,7 +1275,7 @@ spell_move_to(
|
|||||||
char_u *line;
|
char_u *line;
|
||||||
char_u *p;
|
char_u *p;
|
||||||
char_u *endp;
|
char_u *endp;
|
||||||
hlf_T attr;
|
hlf_T attr = 0;
|
||||||
int len;
|
int len;
|
||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
int has_syntax = syntax_present(wp);
|
int has_syntax = syntax_present(wp);
|
||||||
@@ -1308,6 +1308,8 @@ spell_move_to(
|
|||||||
|
|
||||||
while (!got_int)
|
while (!got_int)
|
||||||
{
|
{
|
||||||
|
int empty_line;
|
||||||
|
|
||||||
line = ml_get_buf(wp->w_buffer, lnum, FALSE);
|
line = ml_get_buf(wp->w_buffer, lnum, FALSE);
|
||||||
|
|
||||||
len = (int)STRLEN(line);
|
len = (int)STRLEN(line);
|
||||||
@@ -1340,7 +1342,9 @@ spell_move_to(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Copy the line into "buf" and append the start of the next line if
|
// Copy the line into "buf" and append the start of the next line if
|
||||||
// possible.
|
// possible. Note: this ml_get_buf() may make "line" invalid, check
|
||||||
|
// for empty line first.
|
||||||
|
empty_line = *skipwhite(line) == NUL;
|
||||||
STRCPY(buf, line);
|
STRCPY(buf, line);
|
||||||
if (lnum < wp->w_buffer->b_ml.ml_line_count)
|
if (lnum < wp->w_buffer->b_ml.ml_line_count)
|
||||||
spell_cat_line(buf + STRLEN(buf),
|
spell_cat_line(buf + STRLEN(buf),
|
||||||
@@ -1487,7 +1491,7 @@ spell_move_to(
|
|||||||
--capcol;
|
--capcol;
|
||||||
|
|
||||||
// But after empty line check first word in next line
|
// But after empty line check first word in next line
|
||||||
if (*skipwhite(line) == NUL)
|
if (empty_line)
|
||||||
capcol = 0;
|
capcol = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -802,5 +802,20 @@ func Test_word_index()
|
|||||||
call delete('Xtmpfile')
|
call delete('Xtmpfile')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_check_empty_line()
|
||||||
|
" This was using freed memory
|
||||||
|
enew
|
||||||
|
spellgood! fl
|
||||||
|
norm z=
|
||||||
|
norm yy
|
||||||
|
sil! norm P]svc
|
||||||
|
norm P]s
|
||||||
|
|
||||||
|
" set 'encoding' to clear the wordt list
|
||||||
|
set enc=latin1
|
||||||
|
set enc=utf-8
|
||||||
|
bwipe!
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
" vim: shiftwidth=2 sts=2 expandtab
|
" vim: shiftwidth=2 sts=2 expandtab
|
||||||
|
@@ -734,6 +734,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
5072,
|
||||||
/**/
|
/**/
|
||||||
5071,
|
5071,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user