mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
patch 8.0.0212: buffer for key name may be too small
Problem: The buffer used to store a key name theoreticaly could be too small. (Coverity) Solution: Count all possible modifier characters. Add a check for the length just in case.
This commit is contained in:
@@ -482,9 +482,10 @@ enum key_extra
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* The length of the longest special key name, including modifiers.
|
* The length of the longest special key name, including modifiers.
|
||||||
* Current longest is <M-C-S-T-4-MiddleRelease> (length includes '<' and '>').
|
* Current longest is <M-C-S-T-D-A-4-ScrollWheelRight> (length includes '<' and
|
||||||
|
* '>').
|
||||||
*/
|
*/
|
||||||
#define MAX_KEY_NAME_LEN 25
|
#define MAX_KEY_NAME_LEN 32
|
||||||
|
|
||||||
/* Maximum length of a special key event as tokens. This includes modifiers.
|
/* Maximum length of a special key event as tokens. This includes modifiers.
|
||||||
* The longest event is something like <M-C-S-T-4-LeftDrag> which would be the
|
* The longest event is something like <M-C-S-T-4-LeftDrag> which would be the
|
||||||
|
11
src/misc2.c
11
src/misc2.c
@@ -2162,6 +2162,7 @@ static struct modmasktable
|
|||||||
/* 'A' must be the last one */
|
/* 'A' must be the last one */
|
||||||
{MOD_MASK_ALT, MOD_MASK_ALT, (char_u)'A'},
|
{MOD_MASK_ALT, MOD_MASK_ALT, (char_u)'A'},
|
||||||
{0, 0, NUL}
|
{0, 0, NUL}
|
||||||
|
/* NOTE: when adding an entry, update MAX_KEY_NAME_LEN! */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2431,6 +2432,7 @@ static struct key_name_entry
|
|||||||
{K_PLUG, (char_u *)"Plug"},
|
{K_PLUG, (char_u *)"Plug"},
|
||||||
{K_CURSORHOLD, (char_u *)"CursorHold"},
|
{K_CURSORHOLD, (char_u *)"CursorHold"},
|
||||||
{0, NULL}
|
{0, NULL}
|
||||||
|
/* NOTE: When adding a long name update MAX_KEY_NAME_LEN. */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define KEY_NAMES_TABLE_LEN (sizeof(key_names_table) / sizeof(struct key_name_entry))
|
#define KEY_NAMES_TABLE_LEN (sizeof(key_names_table) / sizeof(struct key_name_entry))
|
||||||
@@ -2659,8 +2661,13 @@ get_special_key_name(int c, int modifiers)
|
|||||||
}
|
}
|
||||||
else /* use name of special key */
|
else /* use name of special key */
|
||||||
{
|
{
|
||||||
STRCPY(string + idx, key_names_table[table_idx].name);
|
size_t len = STRLEN(key_names_table[table_idx].name);
|
||||||
idx = (int)STRLEN(string);
|
|
||||||
|
if (len + idx + 2 <= MAX_KEY_NAME_LEN)
|
||||||
|
{
|
||||||
|
STRCPY(string + idx, key_names_table[table_idx].name);
|
||||||
|
idx += (int)len;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
string[idx++] = '>';
|
string[idx++] = '>';
|
||||||
string[idx] = NUL;
|
string[idx] = NUL;
|
||||||
|
@@ -764,6 +764,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 */
|
||||||
|
/**/
|
||||||
|
212,
|
||||||
/**/
|
/**/
|
||||||
211,
|
211,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user