diff src/tag.c @ 16178:a8689ea2e869 v8.1.1094

patch 8.1.1094: long line in tags file causes error commit https://github.com/vim/vim/commit/5209334c551778fe6f76945f373ee14fcac96f52 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Mar 30 21:41:48 2019 +0100 patch 8.1.1094: long line in tags file causes error Problem: Long line in tags file causes error. Solution: Check for overlong line earlier. (Andy Massimino, closes https://github.com/vim/vim/issues/4051, closes #4084)
author Bram Moolenaar <Bram@vim.org>
date Sat, 30 Mar 2019 21:45:05 +0100
parents 4d7ee5609652
children 848d4c6e391e
line wrap: on
line diff
--- a/src/tag.c
+++ b/src/tag.c
@@ -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;