vim-patch:8.1.0043: ++bad argument of :edit does not work properly

Problem:    ++bad argument of :edit does not work properly.
Solution:   Return FAIL from get_bad_opt() only when there is no valid
            argument. (Dominique Pelle, Christian Brabandt, closes vim/vim#2966,
            closes vim/vim#2947)
7580849df9
This commit is contained in:
Jan Edmund Lazo 2020-02-16 09:04:30 -05:00
parent 18d86283b0
commit acc5fd9fac
No known key found for this signature in database
GPG Key ID: 64915E6E9F735B15
2 changed files with 31 additions and 1 deletions

View File

@ -4547,8 +4547,10 @@ int get_bad_opt(const char_u *p, exarg_T *eap)
eap->bad_char = BAD_DROP;
} else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL) {
eap->bad_char = *p;
} else {
return FAIL;
}
return FAIL;
return OK;
}
/*

View File

@ -8,3 +8,31 @@ function Test_edit()
call delete('Xfile1')
call delete('Xfile2')
endfunction
func Test_edit_bad()
if !has('multi_byte')
finish
endif
" Test loading a utf8 file with bad utf8 sequences.
call writefile(["[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]"], "Xfile")
new
" Without ++bad=..., the default behavior is like ++bad=?
e! ++enc=utf8 Xfile
call assert_equal('[?][?][???][??]', getline(1))
e! ++enc=utf8 ++bad=_ Xfile
call assert_equal('[_][_][___][__]', getline(1))
e! ++enc=utf8 ++bad=drop Xfile
call assert_equal('[][][][]', getline(1))
e! ++enc=utf8 ++bad=keep Xfile
call assert_equal("[\xff][\xc0][\xe2\x89\xf0][\xc2\xc2]", getline(1))
call assert_fails('e! ++enc=utf8 ++bad=foo Xfile', 'E474:')
bw!
call delete('Xfile')
endfunc