Skip to content

Commit

Permalink
patch 8.1.0043: ++bad argument of :edit does not work properly
Browse files Browse the repository at this point in the history
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)
  • Loading branch information
brammool committed Jun 12, 2018
1 parent f98b845 commit 7580849
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 3 deletions.
4 changes: 3 additions & 1 deletion src/ex_docmd.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -5318,7 +5318,9 @@ get_bad_opt(char_u *p, exarg_T *eap)
eap->bad_char = BAD_DROP; eap->bad_char = BAD_DROP;
else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL) else if (MB_BYTE2LEN(*p) == 1 && p[1] == NUL)
eap->bad_char = *p; eap->bad_char = *p;
return FAIL; else
return FAIL;
return OK;
} }
#endif #endif


Expand Down
32 changes: 30 additions & 2 deletions src/testdir/test_plus_arg_edit.vim
Original file line number Original file line Diff line number Diff line change
@@ -1,10 +1,38 @@
" Tests for complicated + argument to :edit command " Tests for complicated + argument to :edit command
function Test_edit() function Test_edit()
call writefile(["foo|bar"], "Xfile1") call writefile(["foo|bar"], "Xfile1")
call writefile(["foo/bar"], "Xfile2") call writefile(["foo/bar"], "Xfile2")
edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w edit +1|s/|/PIPE/|w Xfile1| e Xfile2|1 | s/\//SLASH/|w
call assert_equal(["fooPIPEbar"], readfile("Xfile1")) call assert_equal(["fooPIPEbar"], readfile("Xfile1"))
call assert_equal(["fooSLASHbar"], readfile("Xfile2")) call assert_equal(["fooSLASHbar"], readfile("Xfile2"))
call delete('Xfile1') call delete('Xfile1')
call delete('Xfile2') call delete('Xfile2')
endfunction 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
2 changes: 2 additions & 0 deletions src/version.c
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -761,6 +761,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 */
/**/
43,
/**/ /**/
42, 42,
/**/ /**/
Expand Down

0 comments on commit 7580849

Please sign in to comment.