summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-02-05 11:13:05 +0000
committerBram Moolenaar <Bram@vim.org>2022-02-05 11:13:05 +0000
commitfc88df42f1ae64bcc4d6cbc0fbd3445f8c59afdf (patch)
tree72d864d9ae9b5c2ea1fcae50e9c0fb7b3859263b
parent21ebb0899ecf9049c3e1c9cbc2e06fd8e2a99e06 (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.c2
-rw-r--r--src/testdir/test_vartabs.vim10
-rw-r--r--src/version.c2
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,