summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArun Prakash Jana <engineerarun@gmail.com>2024-05-05 18:40:52 +0530
committerArun Prakash Jana <engineerarun@gmail.com>2024-05-05 18:40:52 +0530
commitbe6988d1c849895e850a67f0f7f5ad176415c513 (patch)
treea8affefc611debac178edaa90be8b51578b44d52
parent191e77ec5d03ec270054fdb95a8e82b648ac9dd9 (diff)
Fix #1877: malloc: error pointer being freed was not allocated
-rw-r--r--src/nnn.c17
1 files 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)