1
0
forked from aniani/vim

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

View File

@@ -4612,7 +4612,7 @@ do_set(
|| (long *)varp == &p_wcm) || (long *)varp == &p_wcm)
&& (*arg == '<' && (*arg == '<'
|| *arg == '^' || *arg == '^'
|| ((!arg[1] || vim_iswhite(arg[1])) || (*arg != NUL && (!arg[1] || vim_iswhite(arg[1]))
&& !VIM_ISDIGIT(*arg)))) && !VIM_ISDIGIT(*arg))))
{ {
value = string_to_key(arg); value = string_to_key(arg);
@@ -5843,7 +5843,7 @@ set_string_option(
opt_flags)) == NULL) opt_flags)) == NULL)
did_set_option(opt_idx, opt_flags, TRUE); 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 defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
if (saved_oldval != NULL) if (saved_oldval != NULL)
{ {

View File

@@ -29,6 +29,19 @@ function! Test_isfname()
set isfname& set isfname&
endfunction 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() function Test_options()
let caught = 'ok' let caught = 'ok'
try try

View File

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