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