commit 3665541dac1479a83edae016aa1053ac7be162ba
parent 744a7554ef43b301355a6957ffd4c9e72a0cb076
Author: NRK <nrk@disroot.org>
Date: Tue, 21 Nov 2023 19:30:40 +0600
fix buffer overflow on certain platforms
the size of g_buf depends on PATH_MAX and NAME_MAX which on certain
platforms (such as mac) might not be big enough to decode the help
string. use an explicit buffer with proper size instead.
Closes: https://github.com/jarun/nnn/issues/1768
Diffstat:
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/nnn.c b/src/nnn.c
@@ -5160,6 +5160,7 @@ static void show_help(const char *path)
"cT Set time type%110 Lock\n"
"b^L Redraw%18? Help, conf\n"
};
+ char help_buf[1<<11]; // if editing helpstr, ensure this has enough space to decode it
int fd = create_tmp_file();
if (fd == -1)
@@ -5170,7 +5171,7 @@ static void show_help(const char *path)
get_output(prog, NULL, NULL, fd, FALSE);
bool hex = true;
- char *w = g_buf;
+ char *w = help_buf;
const char *end = helpstr + (sizeof helpstr - 1);
for (const char *s = helpstr; s < end; ++s) {
if (hex) {
@@ -5184,7 +5185,7 @@ static void show_help(const char *path)
}
hex = *s == '\n';
}
- if (write(fd, g_buf, w - g_buf)) {} // silence warning
+ if (write(fd, help_buf, w - help_buf)) {} // silence warning
dprintf(fd, "\nLOCATIONS\n");
for (uchar_t i = 0; i < CTX_MAX; ++i)