0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.0.0370: invalid memory access when setting wildchar empty

Problem:    Invalid memory access when setting wildchar empty.
Solution:   Avoid going over the end of the option value. (Dominique Pelle,
            closes #1509)  Make option test check all number options with
            empty value.
This commit is contained in:
Bram Moolenaar
2017-02-25 21:37:57 +01:00
parent c43a8b8de0
commit a12e40351d
4 changed files with 19 additions and 3 deletions

View File

@@ -46,6 +46,7 @@ let test_values = {
\ 'updatecount': [[0, 1, 8, 9999], [-1]],
\ 'updatetime': [[0, 1, 8, 9999], [-1]],
\ 'verbose': [[-1, 0, 1, 8, 9999], []],
\ 'wildcharm': [[-1, 0, 100], []],
\ 'winheight': [[1, 10, 999], [-1, 0]],
\ 'winminheight': [[0, 1], [-1]],
\ 'winminwidth': [[0, 1, 10], [-1]],
@@ -137,7 +138,7 @@ let test_values = {
\ 'rubydll': [[], []],
\ 'tcldll': [[], []],
\
\ 'othernum': [[-1, 0, 100], []],
\ 'othernum': [[-1, 0, 100], ['']],
\ 'otherstring': [['', 'xxx'], []],
\}

View File

@@ -4612,7 +4612,7 @@ do_set(
|| (long *)varp == &p_wcm)
&& (*arg == '<'
|| *arg == '^'
|| ((!arg[1] || vim_iswhite(arg[1]))
|| (*arg != NUL && (!arg[1] || vim_iswhite(arg[1]))
&& !VIM_ISDIGIT(*arg))))
{
value = string_to_key(arg);
@@ -5843,7 +5843,7 @@ set_string_option(
opt_flags)) == NULL)
did_set_option(opt_idx, opt_flags, TRUE);
/* call autocomamnd after handling side effects */
/* call autocommand after handling side effects */
#if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
if (saved_oldval != NULL)
{

View File

@@ -29,6 +29,19 @@ function! Test_isfname()
set isfname&
endfunction
function Test_wildchar()
" Empty 'wildchar' used to access invalid memory.
call assert_fails('set wildchar=', 'E521:')
call assert_fails('set wildchar=abc', 'E521:')
set wildchar=<Esc>
let a=execute('set wildchar?')
call assert_equal("\n wildchar=<Esc>", a)
set wildchar=27
let a=execute('set wildchar?')
call assert_equal("\n wildchar=<Esc>", a)
set wildchar&
endfunction
function Test_options()
let caught = 'ok'
try

View File

@@ -764,6 +764,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
370,
/**/
369,
/**/