Skip to content

Commit

Permalink
patch 8.2.4065: computation overflow with large cound for :yank
Browse files Browse the repository at this point in the history
Problem:    Computation overflow with large cound for :yank.
Solution:   Avoid an overflow.
  • Loading branch information
brammool committed Jan 11, 2022
1 parent 2284f6c commit 3cf21b3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 2 deletions.
5 changes: 4 additions & 1 deletion src/ex_docmd.c
Expand Up @@ -2374,7 +2374,10 @@ do_one_cmd(
else
{
ea.line1 = ea.line2;
ea.line2 += n - 1;
if (ea.line2 >= LONG_MAX - (n - 1))
ea.line2 = LONG_MAX; // avoid overflow
else
ea.line2 += n - 1;
++ea.addr_count;
/*
* Be vi compatible: no error message for out of range.
Expand Down
7 changes: 6 additions & 1 deletion src/testdir/test_excmd.vim
Expand Up @@ -704,9 +704,14 @@ func Test_address_line_overflow()
throw 'Skipped: only works with 64 bit long ints'
endif
new
call setline(1, 'text')
call setline(1, range(100))
call assert_fails('|.44444444444444444444444', 'E1247:')
call assert_fails('|.9223372036854775806', 'E1247:')

$
yank 77777777777777777777
call assert_equal("99\n", @")

bwipe!
endfunc

Expand Down
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 */
/**/
4065,
/**/
4064,
/**/
Expand Down

0 comments on commit 3cf21b3

Please sign in to comment.