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:
@@ -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'], []],
|
||||||
\}
|
\}
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user