Skip to content

Commit

Permalink
patch 8.2.3949: using freed memory with /\%V
Browse files Browse the repository at this point in the history
Problem:    Using freed memory with /\%V.
Solution:   Get the line again after getvvcol().
  • Loading branch information
brammool committed Dec 30, 2021
1 parent cfe3af2 commit 4c13e5e
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 2 deletions.
9 changes: 7 additions & 2 deletions src/regexp.c
Expand Up @@ -1310,9 +1310,9 @@ reg_match_visual(void)
if (lnum < top.lnum || lnum > bot.lnum)
return FALSE;

col = (colnr_T)(rex.input - rex.line);
if (mode == 'v')
{
col = (colnr_T)(rex.input - rex.line);
if ((lnum == top.lnum && col < top.col)
|| (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e')))
return FALSE;
Expand All @@ -1327,7 +1327,12 @@ reg_match_visual(void)
end = end2;
if (top.col == MAXCOL || bot.col == MAXCOL || curswant == MAXCOL)
end = MAXCOL;
cols = win_linetabsize(wp, rex.line, (colnr_T)(rex.input - rex.line));

// getvvcol() flushes rex.line, need to get it again
rex.line = reg_getline(rex.lnum);
rex.input = rex.line + col;

cols = win_linetabsize(wp, rex.line, col);
if (cols < start || cols > end - (*p_sel == 'e'))
return FALSE;
}
Expand Down
8 changes: 8 additions & 0 deletions src/testdir/test_regexp_latin.vim
Expand Up @@ -1045,4 +1045,12 @@ func Test_using_mark_position()
bwipe!
endfunc

func Test_using_visual_position()
" this was using freed memory
new
exe "norm 0o\<Esc>\<C-V>k\<C-X>o0"
/\%V
bwipe!
endfunc

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

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

0 comments on commit 4c13e5e

Please sign in to comment.