From: Bram Moolenaar Date: Tue, 12 Jun 2018 10:39:41 +0000 (+0200) Subject: patch 8.1.0043: ++bad argument of :edit does not work properly X-Git-Tag: v8.1.0043 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7580849df9d6c7c515f5ed784019336d8a8ec0f0;p=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 #2966, closes #2947) --- diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 342dec222..3bc86f5ac 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -5318,7 +5318,9 @@ get_bad_opt(char_u *p, exarg_T *eap) eap->bad_char = BAD_DROP; else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL) eap->bad_char = *p; - return FAIL; + else + return FAIL; + return OK; } #endif diff --git a/src/testdir/test_plus_arg_edit.vim b/src/testdir/test_plus_arg_edit.vim index 71dbea199..e91a6e467 100644 --- a/src/testdir/test_plus_arg_edit.vim +++ b/src/testdir/test_plus_arg_edit.vim @@ -1,10 +1,38 @@ " Tests for complicated + argument to :edit command function Test_edit() - call writefile(["foo|bar"], "Xfile1") - call writefile(["foo/bar"], "Xfile2") + call writefile(["foo|bar"], "Xfile1") + call writefile(["foo/bar"], "Xfile2") edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w call assert_equal(["fooPIPEbar"], readfile("Xfile1")) call assert_equal(["fooSLASHbar"], readfile("Xfile2")) 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 diff --git a/src/version.c b/src/version.c index 4ab241eb9..100506b0b 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 43, /**/ 42, /**/