Mercurial > vim
changeset 27072:0878d7c64140 v8.2.4065
patch 8.2.4065: computation overflow with large cound for :yank
Commit: https://github.com/vim/vim/commit/3cf21b305104e91a28e4ce3a473672b2e88a9469
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Jan 11 19:34:16 2022 +0000
patch 8.2.4065: computation overflow with large cound for :yank
Problem: Computation overflow with large cound for :yank.
Solution: Avoid an overflow.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 11 Jan 2022 20:45:02 +0100 |
parents | 04adc77bb4b8 |
children | 4ab8aec1b847 |
files | src/ex_docmd.c src/testdir/test_excmd.vim src/version.c |
diffstat | 3 files changed, 12 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -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.
--- a/src/testdir/test_excmd.vim +++ b/src/testdir/test_excmd.vim @@ -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