Skip to content

Commit

Permalink
patch 8.2.4419: illegal memory access when using 20 highlights
Browse files Browse the repository at this point in the history
Problem:    Illegal memory access when using exactly 20 highlights.
Solution:   Add one more item in the array. (Brandon Richardson,
            closes #9800)
  • Loading branch information
brandon1024 authored and brammool committed Feb 19, 2022
1 parent 5921aeb commit a493b65
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 4 deletions.
13 changes: 9 additions & 4 deletions src/buffer.c
Expand Up @@ -4170,8 +4170,11 @@ build_stl_str_hl(
{
stl_items = ALLOC_MULT(stl_item_T, stl_items_len);
stl_groupitem = ALLOC_MULT(int, stl_items_len);
stl_hltab = ALLOC_MULT(stl_hlrec_T, stl_items_len);
stl_tabtab = ALLOC_MULT(stl_hlrec_T, stl_items_len);

// Allocate one more, because the last element is used to indicate the
// end of the list.
stl_hltab = ALLOC_MULT(stl_hlrec_T, stl_items_len + 1);
stl_tabtab = ALLOC_MULT(stl_hlrec_T, stl_items_len + 1);
}

#ifdef FEAT_EVAL
Expand Down Expand Up @@ -4251,11 +4254,13 @@ build_stl_str_hl(
if (new_groupitem == NULL)
break;
stl_groupitem = new_groupitem;
new_hlrec = vim_realloc(stl_hltab, sizeof(stl_hlrec_T) * new_len);
new_hlrec = vim_realloc(stl_hltab,
sizeof(stl_hlrec_T) * (new_len + 1));
if (new_hlrec == NULL)
break;
stl_hltab = new_hlrec;
new_hlrec = vim_realloc(stl_tabtab, sizeof(stl_hlrec_T) * new_len);
new_hlrec = vim_realloc(stl_tabtab,
sizeof(stl_hlrec_T) * (new_len + 1));
if (new_hlrec == NULL)
break;
stl_tabtab = new_hlrec;
Expand Down
11 changes: 11 additions & 0 deletions src/testdir/test_tabline.vim
Expand Up @@ -134,6 +134,17 @@ func Test_tabline_empty_group()
set tabline=
endfunc

" When there are exactly 20 tabline format items (the exact size of the
" initial tabline items array), test that we don't write beyond the size
" of the array.
func Test_tabline_20_format_items_no_overrun()
set showtabline=2

let tabline = repeat('%#StatColorHi2#', 20)
let &tabline = tabline
redrawtabline

set showtabline& tabline&
endfunc

" vim: shiftwidth=2 sts=2 expandtab
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -750,6 +750,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
4419,
/**/
4418,
/**/
Expand Down

0 comments on commit a493b65

Please sign in to comment.