diff options
-rw-r--r-- | src/tag.c | 48 | ||||
-rw-r--r-- | src/testdir/test_tagjump.vim | 31 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 59 insertions, 22 deletions
@@ -1921,6 +1921,32 @@ line_read_in: } parse_line: + if (vim_strchr(lbuf, NL) == NULL +#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(); + msg(_("Ignoring long line in tags file")); + verbose_leave(); + } +#ifdef FEAT_TAG_BINS + if (state != TS_LINEAR) + { + // Avoid getting stuck. + linear = TRUE; + state = TS_LINEAR; + vim_fseek(fp, search_info.low_offset, SEEK_SET); + } +#endif + continue; + } + /* * Figure out where the different strings are in this line. * For "normal" tags: Do a quick check if the tag matches. @@ -1937,28 +1963,6 @@ parse_line: tagp.tagname_end = vim_strchr(lbuf, TAB); if (tagp.tagname_end == NULL) { - if (vim_strchr(lbuf, NL) == NULL) - { - /* Truncated line, ignore it. Has been reported for - * Mozilla JS with extremely long names. */ - if (p_verbose >= 5) - { - verbose_enter(); - msg(_("Ignoring long line in tags file")); - verbose_leave(); - } -#ifdef FEAT_TAG_BINS - if (state != TS_LINEAR) - { - /* Avoid getting stuck. */ - linear = TRUE; - state = TS_LINEAR; - vim_fseek(fp, search_info.low_offset, SEEK_SET); - } -#endif - continue; - } - /* Corrupted tag line. */ line_error = TRUE; break; diff --git a/src/testdir/test_tagjump.vim b/src/testdir/test_tagjump.vim index 4ce9ece87..7e64ac435 100644 --- a/src/testdir/test_tagjump.vim +++ b/src/testdir/test_tagjump.vim @@ -439,4 +439,35 @@ func Test_tagnr_recall() call delete('Xtest.c') endfunc +func Test_tag_line_toolong() + call writefile([ + \ '1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678 django/contrib/admin/templates/admin/edit_inline/stacked.html 16;" j line:16 language:HTML' + \ ], 'Xtags') + set tags=Xtags + let old_vbs = &verbose + set verbose=5 + " ":tjump" should give "tag not found" not "Format error in tags file" + call assert_fails('tj /foo', 'E426') + try + tj /foo + catch /^Vim\%((\a\+)\)\=:E431/ + call assert_report(v:exception) + catch /.*/ + endtry + call assert_equal('Ignoring long line in tags file', split(execute('messages'), '\n')[-1]) + call writefile([ + \ '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567 django/contrib/admin/templates/admin/edit_inline/stacked.html 16;" j line:16 language:HTML' + \ ], 'Xtags') + call assert_fails('tj /foo', 'E426') + try + tj /foo + catch /^Vim\%((\a\+)\)\=:E431/ + call assert_report(v:exception) + catch /.*/ + endtry + call assert_equal('Ignoring long line in tags file', split(execute('messages'), '\n')[-1]) + call delete('Xtags') + let &verbose = old_vbs +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 6287c79d7..9ba9e92d0 100644 --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1094, +/**/ 1093, /**/ 1092, |