Mercurial > vim
changeset 14935:dc54785f9a1d v8.1.0479
patch 8.1.0479: failure when setting 'varsofttabstop' to end in a comma
commit https://github.com/vim/vim/commit/64f410742f101d7d5ea9e65503e1e0019605eaa5
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Oct 15 22:51:50 2018 +0200
patch 8.1.0479: failure when setting 'varsofttabstop' to end in a comma
Problem: Failure when setting 'varsofttabstop' to end in a comma. (Ralf
Schandl)
Solution: Reject value with trailing command. Add test for invalid values
(closes #3544)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 15 Oct 2018 23:00:05 +0200 |
parents | e28c806cf004 |
children | f74c828b691c |
files | src/option.c src/testdir/test_vartabs.vim src/version.c |
diffstat | 3 files changed, 27 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/src/option.c +++ b/src/option.c @@ -12786,17 +12786,18 @@ tabstop_set(char_u *var, int **array) int t; char_u *cp; - if ((!var[0] || (var[0] == '0' && !var[1]))) + if (var[0] == NUL || (var[0] == '0' && var[1] == NUL)) { *array = NULL; return TRUE; } - for (cp = var; *cp; ++cp) - { - if (cp == var || *(cp - 1) == ',') + for (cp = var; *cp != NUL; ++cp) + { + if (cp == var || cp[-1] == ',') { char_u *end; + if (strtol((char *)cp, (char **)&end, 10) <= 0) { if (cp != end) @@ -12809,7 +12810,7 @@ tabstop_set(char_u *var, int **array) if (VIM_ISDIGIT(*cp)) continue; - if (*cp == ',' && cp > var && *(cp - 1) != ',') + if (cp[0] == ',' && cp > var && cp[-1] != ',' && cp[1] != NUL) { ++valcount; continue; @@ -12818,16 +12819,16 @@ tabstop_set(char_u *var, int **array) return FALSE; } - *array = (int *) alloc((unsigned) ((valcount + 1) * sizeof(int))); + *array = (int *)alloc((unsigned) ((valcount + 1) * sizeof(int))); (*array)[0] = valcount; t = 1; - for (cp = var; *cp;) + for (cp = var; *cp != NUL;) { (*array)[t++] = atoi((char *)cp); - while (*cp && *cp != ',') + while (*cp != NUL && *cp != ',') ++cp; - if (*cp) + if (*cp != NUL) ++cp; }
--- a/src/testdir/test_vartabs.vim +++ b/src/testdir/test_vartabs.vim @@ -5,11 +5,11 @@ if !has("vartabs") endif source view_util.vim -function! s:compare_lines(expect, actual) +func s:compare_lines(expect, actual) call assert_equal(join(a:expect, "\n"), join(a:actual, "\n")) -endfunction +endfunc -func! Test_vartabs() +func Test_vartabs() new %d @@ -261,7 +261,7 @@ func! Test_vartabs_breakindent() bwipeout! endfunc -func! Test_vartabs_linebreak() +func Test_vartabs_linebreak() if winwidth(0) < 40 return endif @@ -296,3 +296,14 @@ func! Test_vartabs_linebreak() bw! set nolist listchars&vim endfunc + +func Test_vartabs_failures() + call assert_fails('set vts=8,') + call assert_fails('set vsts=8,') + call assert_fails('set vts=8,,8') + call assert_fails('set vsts=8,,8') + call assert_fails('set vts=8,,8,') + call assert_fails('set vsts=8,,8,') + call assert_fails('set vts=,8') + call assert_fails('set vsts=,8') +endfunc