diff options
author | Bram Moolenaar <Bram@vim.org> | 2022-02-05 11:13:05 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2022-02-05 11:13:05 +0000 |
commit | fc88df42f1ae64bcc4d6cbc0fbd3445f8c59afdf (patch) | |
tree | 72d864d9ae9b5c2ea1fcae50e9c0fb7b3859263b | |
parent | 21ebb0899ecf9049c3e1c9cbc2e06fd8e2a99e06 (diff) |
patch 8.2.4298: divide by zero with huge tabstop valuev8.2.4298
Problem: Divide by zero with huge tabstop value.
Solution: Reject tabstop value that overflows to zero.
-rw-r--r-- | src/indent.c | 2 | ||||
-rw-r--r-- | src/testdir/test_vartabs.vim | 10 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/indent.c b/src/indent.c index b62308d2a4..9b137b0b42 100644 --- a/src/indent.c +++ b/src/indent.c @@ -71,7 +71,7 @@ tabstop_set(char_u *var, int **array) int n = atoi((char *)cp); // Catch negative values, overflow and ridiculous big values. - if (n < 0 || n > TABSTOP_MAX) + if (n <= 0 || n > TABSTOP_MAX) { semsg(_(e_invalid_argument_str), cp); vim_free(*array); diff --git a/src/testdir/test_vartabs.vim b/src/testdir/test_vartabs.vim index 3b8a9ce0b1..156233dca7 100644 --- a/src/testdir/test_vartabs.vim +++ b/src/testdir/test_vartabs.vim @@ -146,6 +146,16 @@ func Test_vartabs() bwipeout! endfunc +func Test_retab_invalid_arg() + new + call setline(1, "\ttext") + retab 0 + call assert_fails("retab -8", 'E487: Argument must be positive') + call assert_fails("retab 10000", 'E475:') + call assert_fails("retab 720575940379279360", 'E475:') + bwipe! +endfunc + func Test_vartabs_breakindent() CheckOption breakindent new diff --git a/src/version.c b/src/version.c index 95f2b5fd39..7df9eaa7af 100644 --- a/src/version.c +++ b/src/version.c @@ -747,6 +747,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4298, +/**/ 4297, /**/ 4296, |