fix crash under _FORTIFY_SOURCE

when built with _FORTIFY_SOURCE it will check whether the buffer
has as much space as the argument passed to snprintf:

	7b544224f8/debug/snprintf_chk.c (L28-L29)

this results in some false positives when the snprintf provided
len argument is bigger than the buffer size (but the result
would have fit into the buffer anyways).

fix this by passing the proper size to snprintf as argument.
(the +1 len isn't necessary, but add it just in case.)

Fixes: https://github.com/jarun/nnn/issues/1931
This commit is contained in:
NRK 2024-11-11 20:04:38 +00:00
parent 614ebe73fa
commit 43c69abbac

View file

@ -2834,15 +2834,16 @@ static char *get_archive_cmd(const char *archive)
static void archive_selection(const char *cmd, const char *archive)
{
char *buf = malloc((xstrlen(patterns[P_ARCHIVE_CMD]) + xstrlen(cmd) + xstrlen(archive)
+ xstrlen(selpath)) * sizeof(char));
size_t len = xstrlen(patterns[P_ARCHIVE_CMD]) + xstrlen(cmd) + xstrlen(archive)
+ xstrlen(selpath) + 1;
char *buf = malloc(len);
if (!buf) {
DPRINTF_S(strerror(errno));
printwarn(NULL);
return;
}
snprintf(buf, CMD_LEN_MAX, patterns[P_ARCHIVE_CMD], cmd, archive, selpath);
snprintf(buf, len, patterns[P_ARCHIVE_CMD], cmd, archive, selpath);
spawn(utils[UTIL_SH_EXEC], buf, NULL, NULL, F_CLI | F_CONFIRM);
free(buf);
}