The patch doesn't look correct to me.  More below...

On Thu, Mar 07, 2013 at 01:47:35PM -0800, Brendan Cully wrote:
> changeset: 6300:d498f0e91914
> user:      [email protected]
> date:      Mon Mar 04 04:14:43 2013 +0000
> link:      http://dev.mutt.org/hg/mutt/rev/d498f0e91914
> 
> use mkdtemp() to create temporary directory rather than mktemp() followed by 
> mkdir()
> 
> closes #3637
> 
> diffs (40 lines):
> 
> diff -r 4c16c0d1ba9e -r d498f0e91914 lib.c
> --- a/lib.c   Sat Feb 23 03:12:43 2013 +0000
> +++ b/lib.c   Mon Mar 04 04:14:43 2013 +0000
> @@ -548,7 +548,6 @@
>    const char *basename;
>    char parent[_POSIX_PATH_MAX];
>    char *p;
> -  int rv;
>  
>    strfcpy (parent, NONULL (path), sizeof (parent));
>    
> @@ -563,17 +562,19 @@
>      basename = path;
>    }
>  
> -  do 
> +  snprintf (newdir, ndlen, "%s/%s", parent, ".muttXXXXXX");
> +  if (mkdtemp(newdir) == NULL)

newdir is a template arg to mkdtemp().  The directory created by
mkdtemp() is output as the return value.  The code should
be:

char *tmpdir;

if ((tmpdir = mkdtemp(newdir)) == NULL)

and tmpdir used instead of newdir below.

>    {
> -    snprintf (newdir, ndlen, "%s/%s", parent, ".muttXXXXXX");
> -    mktemp (newdir);
> -  } 
> -  while ((rv = mkdir (newdir, 0700)) == -1 && errno == EEXIST);
> +      dprint(1, (debugfile, "mutt_mkwrapdir: mkdtemp() failed\n"));
> +      return -1;
> +  }
>    
> -  if (rv == -1)
> -    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;  
>  }
>  

-- 
Will Fiveash

Reply via email to