dtfile/dtcopy/fsrtns: CID 88868,88128
authorJon Trulson <jon@radscan.com>
Wed, 11 Apr 2018 21:57:03 +0000 (15:57 -0600)
committerJon Trulson <jon@radscan.com>
Wed, 11 Apr 2018 22:25:52 +0000 (16:25 -0600)
cde/programs/dtfile/dtcopy/fsrtns.c

index fb29f00931e4a65039b90af72b668b9ea2b9e2e6..c184ca3a4fc4f756dc8d9e5ce070e646b9f2e427 100644 (file)
@@ -211,7 +211,7 @@ CopyDir(char *sourceP, char *targetP, int repl, int link, struct stat *statP)
 {
   DIR *dirP;                      /* open directory */
   struct dirent *entryP;          /* directory entry */
-  char srcname[1024], tgtname[1024];
+  char srcname[PATH_MAX], tgtname[PATH_MAX];
   int srclen, tgtlen;
   int rc;
 
@@ -225,7 +225,10 @@ CopyDir(char *sourceP, char *targetP, int repl, int link, struct stat *statP)
   if (rc < 0 && errno == EEXIST && repl) {
     rc = EraseObject(targetP, repl);
     if (rc)
-      return rc;
+    {
+        closedir(dirP);
+        return rc;
+    }
     rc = mkdir(targetP, statP->st_mode & 0777);
   }
   if (rc < 0) {
@@ -247,11 +250,11 @@ CopyDir(char *sourceP, char *targetP, int repl, int link, struct stat *statP)
   }
 
   /* prepare source and target names */
-  strcpy(srcname, sourceP);
+  snprintf(srcname, PATH_MAX, "%s", sourceP);
   srclen = strlen(srcname);
   if (srcname[srclen - 1] != '/')
     srcname[srclen++] = '/';
-  strcpy(tgtname, targetP);
+  snprintf(tgtname, PATH_MAX, "%s", targetP);
   tgtlen = strlen(tgtname);
   if (tgtname[tgtlen - 1] != '/')
     tgtname[tgtlen++] = '/';