forked from aniani/vim
patch 8.1.0898: a messed up rgb.txt can crash Vim
Problem: A messed up rgb.txt can crash Vim. (Pavel Cheremushkin) Solution: Limit to 10000 entries. Also don't retry many times when the file cannot be read.
This commit is contained in:
10
src/term.c
10
src/term.c
@@ -6985,13 +6985,13 @@ gui_get_color_cmn(char_u *name)
|
|||||||
return rgb_table[i].color;
|
return rgb_table[i].color;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Last attempt. Look in the file "$VIM/rgb.txt".
|
* Last attempt. Look in the file "$VIMRUNTIME/rgb.txt".
|
||||||
*/
|
*/
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
{
|
{
|
||||||
int counting;
|
int counting;
|
||||||
|
|
||||||
/* colornames_table not yet initialized */
|
// colornames_table not yet initialized
|
||||||
fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
|
fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
|
||||||
if (fname == NULL)
|
if (fname == NULL)
|
||||||
return INVALCOLOR;
|
return INVALCOLOR;
|
||||||
@@ -7002,6 +7002,7 @@ gui_get_color_cmn(char_u *name)
|
|||||||
{
|
{
|
||||||
if (p_verbose > 1)
|
if (p_verbose > 1)
|
||||||
verb_msg(_("Cannot open $VIMRUNTIME/rgb.txt"));
|
verb_msg(_("Cannot open $VIMRUNTIME/rgb.txt"));
|
||||||
|
size = -1; // don't try again
|
||||||
return INVALCOLOR;
|
return INVALCOLOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -7050,6 +7051,11 @@ gui_get_color_cmn(char_u *name)
|
|||||||
colornames_table[size].color = (guicolor_T)RGB(r, g, b);
|
colornames_table[size].color = (guicolor_T)RGB(r, g, b);
|
||||||
}
|
}
|
||||||
size++;
|
size++;
|
||||||
|
|
||||||
|
// The distributed rgb.txt has less than 1000 entries. Limit to
|
||||||
|
// 10000, just in case the file was messed up.
|
||||||
|
if (size == 10000)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(fd);
|
fclose(fd);
|
||||||
|
@@ -783,6 +783,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 */
|
||||||
|
/**/
|
||||||
|
898,
|
||||||
/**/
|
/**/
|
||||||
897,
|
897,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user