]> granicus.if.org Git - vim/commitdiff
patch 8.1.1100: tag file without trailing newline no longer works v8.1.1100
authorBram Moolenaar <Bram@vim.org>
Tue, 2 Apr 2019 19:26:07 +0000 (21:26 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 2 Apr 2019 19:26:07 +0000 (21:26 +0200)
Problem:    Tag file without trailing newline no longer works. (Marco Hinz)
Solution:   Don't expect a newline at the end of the file. (closes #4200)

src/tag.c
src/testdir/test_taglist.vim
src/version.c

index 10039b78736e34bca7ad3e4288591a92d1c99ca4..6a85e747a8d944186c464d647ffb8a98eefc5964 100644 (file)
--- a/src/tag.c
+++ b/src/tag.c
@@ -1943,14 +1943,16 @@ line_read_in:
            }
 
 parse_line:
-           if (vim_strchr(lbuf, NL) == NULL
+           // When the line is too long the NUL will not be in the
+           // last-but-one byte (see vim_fgets()).
+           // Has been reported for Mozilla JS with extremely long names.
+           // In that case we can't parse it and we ignore the line.
+           if (lbuf[LSIZE - 2] != NUL
 #ifdef FEAT_CSCOPE
                                             && !use_cscope
 #endif
                                             )
            {
-               // Truncated line, ignore it.  Has been reported for
-               // Mozilla JS with extremely long names.
                if (p_verbose >= 5)
                {
                    verbose_enter();
index de9ca0c809f4675270f89d3d348e6d3b663fea34..6506c3f1d1f83884f2baca28d3bf9f204fbe6fb9 100644 (file)
@@ -98,3 +98,16 @@ func Test_tagfiles()
   call delete('Xtags2')
   bd
 endfunc
+
+" For historical reasons we support a tags file where the last line is missing
+" the newline.
+func Test_tagsfile_without_trailing_newline()
+  call writefile(["Foo\tfoo\t1"], 'Xtags', 'b')
+  set tags=Xtags
+
+  let tl = taglist('.*')
+  call assert_equal(1, len(tl))
+  call assert_equal('Foo', tl[0].name)
+
+  call delete('Xtags')
+endfunc
index 1b38d299acf1d56b5363d4746a1476727fc72ccd..bb112db467dd6a443130fcfa852cb2fe53f995aa 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1100,
 /**/
     1099,
 /**/