diff options
author | Arun Prakash Jana <engineerarun@gmail.com> | 2020-02-02 17:36:35 +0530 |
---|---|---|
committer | Arun Prakash Jana <engineerarun@gmail.com> | 2020-02-02 17:36:35 +0530 |
commit | 6faab79ba968b81a9ccaea9454a5224655a0dc2a (patch) | |
tree | 3832dde504ab4a2beed9618502b005a7137ed9f7 /src/nnn.c | |
parent | 06f6435ebdf6b426598aa395c60ed37c9c2a8419 (diff) | |
download | nnn-6faab79ba968b81a9ccaea9454a5224655a0dc2a.tar.gz |
xrealloc() may move memory
Diffstat (limited to 'src/nnn.c')
-rw-r--r-- | src/nnn.c | 13 |
1 files changed, 10 insertions, 3 deletions
@@ -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; |