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.
diff --git a/src/term.c b/src/term.c
index 47d2bda..be33fb9 100644
--- a/src/term.c
+++ b/src/term.c
@@ -6985,13 +6985,13 @@
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)
{
int counting;
- /* colornames_table not yet initialized */
+ // colornames_table not yet initialized
fname = expand_env_save((char_u *)"$VIMRUNTIME/rgb.txt");
if (fname == NULL)
return INVALCOLOR;
@@ -7002,6 +7002,7 @@
{
if (p_verbose > 1)
verb_msg(_("Cannot open $VIMRUNTIME/rgb.txt"));
+ size = -1; // don't try again
return INVALCOLOR;
}
@@ -7050,6 +7051,11 @@
colornames_table[size].color = (guicolor_T)RGB(r, g, b);
}
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);
diff --git a/src/version.c b/src/version.c
index 6e3d780..a2c250e 100644
--- a/src/version.c
+++ b/src/version.c
@@ -784,6 +784,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 898,
+/**/
897,
/**/
896,