# HG changeset patch # User Christian Brabandt # Date 1488055504 -3600 # Node ID 6da4287fd73577120366af8b95c8f8efe36714d7 # Parent fb50279310e3cb8beb0412640b88d2d13aff4c09 patch 8.0.0370: invalid memory access when setting wildchar empty commit https://github.com/vim/vim/commit/a12e40351d1357687e8b5dc3122fffef705bdc08 Author: Bram Moolenaar Date: Sat Feb 25 21:37:57 2017 +0100 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. diff --git a/src/gen_opt_test.vim b/src/gen_opt_test.vim --- a/src/gen_opt_test.vim +++ b/src/gen_opt_test.vim @@ -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'], []], \} diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -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) { diff --git a/src/testdir/test_options.vim b/src/testdir/test_options.vim --- a/src/testdir/test_options.vim +++ b/src/testdir/test_options.vim @@ -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= + let a=execute('set wildchar?') + call assert_equal("\n wildchar=", a) + set wildchar=27 + let a=execute('set wildchar?') + call assert_equal("\n wildchar=", a) + set wildchar& +endfunction + function Test_options() let caught = 'ok' try diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -765,6 +765,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 370, +/**/ 369, /**/ 368,