Skip to content

Commit

Permalink
patch 8.2.4956: reading past end of line with "gf" in Visual block mode
Browse files Browse the repository at this point in the history
Problem:    Reading past end of line with "gf" in Visual block mode.
Solution:   Do not include the NUL in the length.
  • Loading branch information
brammool committed May 14, 2022
1 parent 788c06a commit 395bd1f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
13 changes: 10 additions & 3 deletions src/normal.c
Expand Up @@ -3671,9 +3671,16 @@ get_visual_text(
}
if (**pp == NUL)
*lenp = 0;
if (has_mbyte && *lenp > 0)
// Correct the length to include all bytes of the last character.
*lenp += (*mb_ptr2len)(*pp + (*lenp - 1)) - 1;
if (*lenp > 0)
{
if (has_mbyte)
// Correct the length to include all bytes of the last
// character.
*lenp += (*mb_ptr2len)(*pp + (*lenp - 1)) - 1;
else if ((*pp)[*lenp - 1] == NUL)
// Do not include a trailing NUL.
*lenp -= 1;
}
}
reset_VIsual_and_resel();
return OK;
Expand Down
15 changes: 15 additions & 0 deletions src/testdir/test_gf.vim
Expand Up @@ -138,6 +138,21 @@ func Test_gf_visual()
call assert_equal('Xtest_gf_visual', bufname('%'))
call assert_equal(3, getcurpos()[1])

" do not include the NUL at the end
call writefile(['x'], 'X')
let save_enc = &enc
for enc in ['latin1', 'utf-8']
exe "set enc=" .. enc
new
call setline(1, 'X')
set nomodified
exe "normal \<C-V>$gf"
call assert_equal('X', bufname())
bwipe!
endfor
let &enc = save_enc
call delete('X')

" line number in visual area is used for file name
if has('unix')
bwipe!
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -746,6 +746,8 @@ static char *(features[]) =

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

0 comments on commit 395bd1f

Please sign in to comment.