Fix buffer overflow in keys_action_allkeys()
Signed-off-by: Lukas Fleischer <lfleischer@calcurse.org>
This commit is contained in:
parent
2cd60c78cf
commit
7efe03cf05
13
src/keys.c
13
src/keys.c
@ -452,18 +452,23 @@ char *keys_action_allkeys(enum key action)
|
|||||||
{
|
{
|
||||||
llist_item_t *i;
|
llist_item_t *i;
|
||||||
static char keystr[BUFSIZ];
|
static char keystr[BUFSIZ];
|
||||||
const char *CHAR_SPACE = " ";
|
int keystrlen = 0;
|
||||||
|
int entrylen;
|
||||||
|
|
||||||
if (!LLIST_FIRST(&keys[action]))
|
if (!LLIST_FIRST(&keys[action]))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
keystr[0] = '\0';
|
keystr[0] = '\0';
|
||||||
LLIST_FOREACH(&keys[action], i) {
|
LLIST_FOREACH(&keys[action], i) {
|
||||||
const int MAXLEN = sizeof(keystr) - 1 - strlen(keystr);
|
entrylen = strlen(LLIST_GET_DATA(i)) + 1;
|
||||||
strncat(keystr, LLIST_GET_DATA(i), MAXLEN - 1);
|
if (keystrlen + entrylen >= BUFSIZ)
|
||||||
strncat(keystr, CHAR_SPACE, 1);
|
break;
|
||||||
|
memcpy(keystr + keystrlen, LLIST_GET_DATA(i), entrylen - 1);
|
||||||
|
keystr[keystrlen + entrylen - 1] = ' ';
|
||||||
|
keystrlen += entrylen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
keystr[keystrlen] = '\0';
|
||||||
return keystr;
|
return keystr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user