]> granicus.if.org Git - vim/commitdiff
patch 8.1.0043: ++bad argument of :edit does not work properly v8.1.0043
authorBram Moolenaar <Bram@vim.org>
Tue, 12 Jun 2018 10:39:41 +0000 (12:39 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 12 Jun 2018 10:39:41 +0000 (12:39 +0200)
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)

src/ex_docmd.c
src/testdir/test_plus_arg_edit.vim
src/version.c

index 342dec2229487cae567cd9b82cc9b1ec8bd315af..3bc86f5ac8754b66f0212155d258357b3b07df92 100644 (file)
@@ -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
 
index 71dbea199174a3cdbc58c344383a6dbca20261b6..e91a6e467a1b6a2b63d4b5b58016e751c38dc86a 100644 (file)
@@ -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
index 4ab241eb90780ebce1105b81d0fb3ec80f8ad8db..100506b0b1d064c5f1724f352a114412d254f496 100644 (file)
@@ -761,6 +761,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    43,
 /**/
     42,
 /**/