diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-10-15 22:51:50 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-10-15 22:51:50 +0200 |
commit | 64f410742f101d7d5ea9e65503e1e0019605eaa5 (patch) | |
tree | 23944927f1a05f22f42d19574ecede2f963fc209 /src/option.c | |
parent | 65dc12143a0b5040922bdb47c522e93909701a10 (diff) | |
download | vim-git-64f410742f101d7d5ea9e65503e1e0019605eaa5.tar.gz |
patch 8.1.0479: failure when setting 'varsofttabstop' to end in a commav8.1.0479
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)
Diffstat (limited to 'src/option.c')
-rw-r--r-- | src/option.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/option.c b/src/option.c index d70dc7b5d..d1f1d1382 100644 --- 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) + for (cp = var; *cp != NUL; ++cp) { - if (cp == var || *(cp - 1) == ',') + 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; } |