mirror of
https://github.com/vim/vim.git
synced 2025-09-29 04:34:16 -04:00
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)
|
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. */
|
* search. */
|
||||||
linear = TRUE;
|
linear = TRUE;
|
||||||
state = TS_LINEAR;
|
state = TS_LINEAR;
|
||||||
@@ -1922,6 +1922,19 @@ line_read_in:
|
|||||||
MSG(_("Ignoring long line in tags file"));
|
MSG(_("Ignoring long line in tags file"));
|
||||||
verbose_leave();
|
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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -714,6 +714,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
373,
|
||||||
/**/
|
/**/
|
||||||
372,
|
372,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user