]> granicus.if.org Git - mutt/commitdiff
use mkdtemp() to create temporary directory rather than mktemp() followed by mkdir()
authoris <is@netbsd.org>
Mon, 4 Mar 2013 04:14:43 +0000 (04:14 +0000)
committeris <is@netbsd.org>
Mon, 4 Mar 2013 04:14:43 +0000 (04:14 +0000)
closes #3637

lib.c

diff --git a/lib.c b/lib.c
index 9662760d764cf985b37f689013981c7606d1816c..b80a997b1b70771653734295b4bcb06dadd2f9b8 100644 (file)
--- a/lib.c
+++ b/lib.c
@@ -548,7 +548,6 @@ static int mutt_mkwrapdir (const char *path, char *newfile, size_t nflen,
   const char *basename;
   char parent[_POSIX_PATH_MAX];
   char *p;
-  int rv;
 
   strfcpy (parent, NONULL (path), sizeof (parent));
   
@@ -563,17 +562,19 @@ static int mutt_mkwrapdir (const char *path, char *newfile, size_t nflen,
     basename = path;
   }
 
-  do 
+  snprintf (newdir, ndlen, "%s/%s", parent, ".muttXXXXXX");
+  if (mkdtemp(newdir) == NULL)
   {
-    snprintf (newdir, ndlen, "%s/%s", parent, ".muttXXXXXX");
-    mktemp (newdir);
-  } 
-  while ((rv = mkdir (newdir, 0700)) == -1 && errno == EEXIST);
-  
-  if (rv == -1)
-    return -1;
+      dprint(1, (debugfile, "mutt_mkwrapdir: mkdtemp() failed\n"));
+      return -1;
+  }
   
-  snprintf (newfile, nflen, "%s/%s", newdir, NONULL(basename));
+  if (snprintf (newfile, nflen, "%s/%s", newdir, NONULL(basename)) >= nflen)
+  {
+      rmdir(newdir);
+      dprint(1, (debugfile, "mutt_mkwrapdir: string was truncated\n"));
+      return -1;
+  }
   return 0;  
 }