]> Sergey Matveev's repositories - nnn.git/commitdiff
Late allocate memory for path pointers
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Feb 2020 13:40:35 +0000 (19:10 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 2 Feb 2020 13:40:35 +0000 (19:10 +0530)
src/nnn.c

index 1b9f7a2b867bc7c620248601592c6fa91f7999e0..f2b46e8ebaa23ccf3438b7450487c66f22b75ccc 100644 (file)
--- a/src/nnn.c
+++ b/src/nnn.c
 #define DOT_FILTER_LEN 7
 #define ASCII_MAX 128
 #define EXEC_ARGS_MAX 8
+#define LIST_FILES_MAX (1 << 16)
 #define SCROLLOFF 3
 #define MIN_DISPLAY_COLS 10
 #define LONG_SIZE sizeof(ulong)
@@ -6134,8 +6135,8 @@ 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];
+       size_t offsets[LIST_FILES_MAX];
+       char **paths = NULL;
        ssize_t input_read, total_read = 0, off = 0;
 
        if (!input) {
@@ -6168,7 +6169,7 @@ static char *load_input()
                                continue;
                        }
 
-                       if (entries == (1 << 16))
+                       if (entries == LIST_FILES_MAX)
                                goto malloc_1;
 
                        offsets[entries++] = off;
@@ -6186,7 +6187,7 @@ static char *load_input()
        }
 
        if (off != total_read) {
-               if (entries == (1 << 16))
+               if (entries == LIST_FILES_MAX)
                        goto malloc_1;
 
                offsets[entries++] = off;
@@ -6197,6 +6198,10 @@ static char *load_input()
 
        input[total_read] = '\0';
 
+       paths = malloc(entries * sizeof(char *));
+       if (!paths)
+               goto malloc_1;
+
        for (i = 0; i < entries; ++i)
                paths[i] = input + offsets[i];
 
@@ -6225,7 +6230,7 @@ static char *load_input()
        if (entries == 1) {
                tmp = xmemrchr((uchar *)g_prefixpath, '/', strlen(g_prefixpath));
                if (!tmp)
-                       return NULL;
+                       goto malloc_2;
 
                *(tmp != g_prefixpath ? tmp : tmp + 1) = '\0';
        }
@@ -6237,6 +6242,7 @@ malloc_2:
                free(paths[i]);
 malloc_1:
        free(input);
+       free(paths);
        return tmpdir;
 }