From be6988d1c849895e850a67f0f7f5ad176415c513 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sun, 5 May 2024 18:40:52 +0530 Subject: [PATCH] Fix #1877: malloc: error pointer being freed was not allocated --- src/nnn.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/nnn.c b/src/nnn.c index f3cbefdf..41303ce0 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -5187,7 +5187,6 @@ 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) @@ -5198,22 +5197,26 @@ static void show_help(const char *path) get_output(prog, NULL, NULL, fd, FALSE); bool hex = true; - char *w = help_buf; + const char space = ' '; const char *end = helpstr + (sizeof helpstr - 1); + for (const char *s = helpstr; s < end; ++s) { if (hex) { - for (int k = 0, n = xchartohex(*s); k < n; ++k) *w++ = ' '; + for (int k = 0, n = xchartohex(*s); k < n; ++k) + if (write(fd, &space, 1) != 1) + break; } else if (*s == '%') { int n = ((s[1] - '0') * 10) + (s[2] - '0'); - for (int k = 0; k < n; ++k) *w++ = ' '; + for (int k = 0; k < n; ++k) + if (write(fd, &space, 1) != 1) + break; s += 2; } else { - *w++ = *s; + if (write(fd, s, 1) != 1) + break; } hex = *s == '\n'; } - ssize_t res = write(fd, help_buf, w - help_buf); - (void)res; // silence warning dprintf(fd, "\nLOCATIONS\n"); for (uchar_t i = 0; i < CTX_MAX; ++i)