Bug#544682: [PATCH] Use mkdtemp if available, prevent writing past end of string otherwise.
Bram Moolenaar
Bram at Moolenaar.net
Mon Nov 9 18:43:17 UTC 2009
James -
> vim_tempname, when TEMPDIRS is defined, attempts to create a temp directory as
> follows:
>
> for each dir in TEMPDIRS
> if dir exists
> for i in 1 .. 10000
> append vXXXXXX string to dirname
> mkdir dirname
> if mkdir succeeded, break
> else, continue with next i
>
> The problem here is that itmp, which stores the directory name, is only
> TEMPNAMELEN bytes long (max of 256). Yet, the loop appends 7 characters
> potentially 10,000 times. This blatantly writes past the end of itmp if the
> loop runs more than a handful of times.
>
> Exactly this happened in <http://bugs.debian.org/544682>. The fault lies
> squarely in smbnetfs for erroneously stating that $TMPDIR, $TMPDIRv667563,
> $TMPDIRv667563v66754, etc. were existing directories, but Vim should avoid
> crashing in that scenario.
>
> First, the logic for creating a temp directory should take advantage of
> existing library functionality. To that end, vim_tempfile will now use
> mkdtemp if it is available. This change itself prevents the crash from
> happening wherever Vim can use mkdtemp (which should be widely available).
>
> Second, if mkdtemp isn't used, vim_tempfile will overwrite the previous
> generated string instead of appending to itmp. I.e., directory names will
> progress as $TMPDIRv667563, $TMPDIRv667564, $TMPDIRv667565, etc. instead of
> $TMPDIRv667563, $TMPDIRv667563v667564, $TMPDIRv667563v667564v667565. This
> is meant as a safe guard for the places, if there are any, where the
> TEMPDIRS section of the code is run and mkdtemp is not available.
Thanks for the patch, I'll look into it soon.
- Bram
--
INSPECTOR END OF FILM: Move along. There's nothing to see! Keep moving!
[Suddenly he notices the cameras.]
INSPECTOR END OF FILM: (to Camera) All right, put that away sonny.
[He walks over to it and puts his hand over the lens.]
"Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD
/// Bram Moolenaar -- Bram at Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
More information about the pkg-vim-maintainers
mailing list