Mercurial > vim
changeset 10962:6da4287fd735 v8.0.0370
patch 8.0.0370: invalid memory access when setting wildchar empty
commit https://github.com/vim/vim/commit/a12e40351d1357687e8b5dc3122fffef705bdc08
Author: Bram Moolenaar <Bram@vim.org>
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.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sat, 25 Feb 2017 21:45:04 +0100 |
parents | fb50279310e3 |
children | e65a6385c68a |
files | src/gen_opt_test.vim src/option.c src/testdir/test_options.vim src/version.c |
diffstat | 4 files changed, 19 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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'], []], \}
--- 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) {
--- 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=<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