diff --git a/src/nnn.c b/src/nnn.c index 5c602781..1b9f7a2b 100644 --- a/src/nnn.c +++ b/src/nnn.c @@ -6134,6 +6134,7 @@ static char *load_input() ssize_t i, chunk_count = 1, chunk = 512 * 1024, entries = 0; char *input = malloc(sizeof(char) * chunk), *tmpdir = NULL; char cwd[PATH_MAX], *next, *tmp; + size_t offsets[1 << 16]; char *paths[1 << 16]; ssize_t input_read, total_read = 0, off = 0; @@ -6170,22 +6171,25 @@ static char *load_input() if (entries == (1 << 16)) goto malloc_1; - paths[entries++] = input + off; + offsets[entries++] = off; off = next - input; } if (input_read < chunk) break; - if (chunk_count == 512 || !(input = xrealloc(input, (chunk_count + 1) * chunk))) + if (chunk_count == 512) goto malloc_1; + + if (!(input = xrealloc(input, (chunk_count + 1) * chunk))) + return NULL; } if (off != total_read) { if (entries == (1 << 16)) goto malloc_1; - paths[entries++] = input + off; + offsets[entries++] = off; } if (!entries) @@ -6193,6 +6197,9 @@ static char *load_input() input[total_read] = '\0'; + for (i = 0; i < entries; ++i) + paths[i] = input + offsets[i]; + g_prefixpath = malloc(sizeof(char) * PATH_MAX); if (!g_prefixpath) goto malloc_1;