aboutsummaryrefslogtreecommitdiffstats
path: root/src/nnn.c
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-02-02 17:36:35 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2020-02-02 17:36:35 +0530
commit6faab79ba968b81a9ccaea9454a5224655a0dc2a (patch)
tree3832dde504ab4a2beed9618502b005a7137ed9f7 /src/nnn.c
parent06f6435ebdf6b426598aa395c60ed37c9c2a8419 (diff)
downloadnnn-6faab79ba968b81a9ccaea9454a5224655a0dc2a.tar.gz
xrealloc() may move memory
Diffstat (limited to 'src/nnn.c')
-rw-r--r--src/nnn.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/nnn.c b/src/nnn.c
index 5c60278..1b9f7a2 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;