0
0
mirror of https://github.com/vim/vim.git synced 2025-09-30 04:44:14 -04:00

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:
Bram Moolenaar
2019-02-12 20:46:48 +01:00
parent 05c00c038b
commit 0ea21e41c6
2 changed files with 10 additions and 2 deletions

View File

@@ -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);

View File

@@ -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,
/**/ /**/