forked from aniani/vim
updated for version 7.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.
This commit is contained in:
15
src/tag.c
15
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;
|
||||
}
|
||||
|
||||
|
@@ -714,6 +714,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
373,
|
||||
/**/
|
||||
372,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user