[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[PATCH 4/4] src/utilities/backend-copy.c: Fix a PATH_MAX issue.



---
 src/utilities/backend-copy.c |   17 +++++++++++++----
 1 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/utilities/backend-copy.c b/src/utilities/backend-copy.c
index 92917c1..f8d1e23 100644
--- a/src/utilities/backend-copy.c
+++ b/src/utilities/backend-copy.c
@@ -105,9 +105,12 @@ int main(int argc, char *argv[])
       }
     }
 
-    char lexf[PATH_MAX + 1];
-    lexf[PATH_MAX] = '\0';
-    snprintf(lexf, PATH_MAX, FS_STORE_ROOT "/%s", tokb);
+    char *lexf = NULL;
+    int lexflen = snprintf(NULL, 0, FS_STORE_ROOT "/%s", tokb) + 1;
+    lexf = malloc(lexflen);
+    if (!lexf)
+        return EXIT_FAILURE;
+    snprintf(lexf, lexflen, FS_STORE_ROOT "/%s", tokb);
 
     int result = mkdir(lexf, 0777);
     if (result) {
@@ -119,13 +122,19 @@ int main(int argc, char *argv[])
       return 3;
     }
 
-    snprintf(lexf, PATH_MAX, "cp -a " FS_KB_DIR "* " FS_STORE_ROOT "/%s", fromkb, tokb);
+    lexflen = snprintf(NULL, 0, "cp -a " FS_KB_DIR "* " FS_STORE_ROOT "/%s", fromkb, tokb) + 1;
+    lexf = realloc(lexf, lexflen);
+    if (!lexf)
+        return EXIT_FAILURE;
+    snprintf(lexf, lexflen, "cp -a " FS_KB_DIR "* " FS_STORE_ROOT "/%s", fromkb, tokb);
     if (verbosity) printf("executing %s\n", lexf);
     if (system(lexf)) {
       fs_error(LOG_ERR, "problem while copying data files from “%s” to “%s”", fromkb, tokb);
       return 4;
     }
 
+    free(lexf);
+
     /* fix up */
 
     fs_metadata *meta = fs_metadata_open(tokb);
-- 
1.7.9.1


Reply to: