diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-02-25 21:37:57 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-02-25 21:37:57 +0100 |
commit | a12e40351d1357687e8b5dc3122fffef705bdc08 (patch) | |
tree | b4d27ae401a3a6e7458eb95f9a6574959c679503 | |
parent | c43a8b8de0676caf8a460b6af1310d7aba8221bb (diff) | |
download | vim-git-a12e40351d1357687e8b5dc3122fffef705bdc08.tar.gz |
patch 8.0.0370: invalid memory access when setting wildchar emptyv8.0.0370
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.
-rw-r--r-- | src/gen_opt_test.vim | 3 | ||||
-rw-r--r-- | src/option.c | 4 | ||||
-rw-r--r-- | src/testdir/test_options.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 19 insertions, 3 deletions
diff --git a/src/gen_opt_test.vim b/src/gen_opt_test.vim index 39705063b..745e5ea4c 100644 --- 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 index 5a8af316b..d948ac696 100644 --- 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 index 623e46c6f..ac43c1a81 100644 --- 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 diff --git a/src/version.c b/src/version.c index 5a60374fb..1482343e7 100644 --- 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, |