summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <bram@vim.org>2011-12-14 14:15:16 +0100
committerBram Moolenaar <bram@vim.org>2011-12-14 14:15:16 +0100
commit345ca444f4adacc93261f65f7e287286b2b448f3 (patch)
tree8d1857cf3f0a1734461af0c31b9777ca11163064
parentd4e50cde3e0b87d0b9902a4b59ef92f18a2f2405 (diff)
downloadvim-345ca444f4adacc93261f65f7e287286b2b448f3.tar.gz
updated for version 7.3.373v7.3.373v7-3-373
Problem: A tags file with an extremely long name may cause an infinite loop. Solution: When encountering a long name switch to linear search.
-rw-r--r--src/tag.c15
-rw-r--r--src/version.c2
2 files changed, 16 insertions, 1 deletions
diff --git a/src/tag.c b/src/tag.c
index f9738ef0..41c7c582 100644
--- a/src/tag.c
+++ b/src/tag.c
@@ -1854,7 +1854,7 @@ line_read_in:
if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
{
- /* binary search won't work for ignoring case, use linear
+ /* Binary search won't work for ignoring case, use linear
* search. */
linear = TRUE;
state = TS_LINEAR;
@@ -1922,6 +1922,19 @@ line_read_in:
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;
+# ifdef HAVE_FSEEKO
+ fseeko(fp, search_info.low_offset, SEEK_SET);
+# else
+ fseek(fp, (long)search_info.low_offset, SEEK_SET);
+# endif
+ }
+#endif
continue;
}
diff --git a/src/version.c b/src/version.c
index e2f60f61..af276df8 100644
--- a/src/version.c
+++ b/src/version.c
@@ -715,6 +715,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 373,
+/**/
372,
/**/
371,