changeset 23017:d80faed40bec v8.2.2055

patch 8.2.2055: MS-Windows: two Vim instances may use the same temp file Commit: https://github.com/vim/vim/commit/2472a74be4dedfeaff22314f31cf9787618163d1 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Nov 26 19:47:28 2020 +0100 patch 8.2.2055: MS-Windows: two Vim instances may use the same temp file Problem: MS-Windows: two Vim instances may use the same temp file. Solution: Use the process ID for the temp name. (Ken Takata, closes https://github.com/vim/vim/issues/7378)
author Bram Moolenaar <Bram@vim.org>
date Thu, 26 Nov 2020 20:00:06 +0100
parents 7f40dcbf9222
children 4007526cb1ed
files src/fileio.c src/version.c
diffstat 2 files changed, 11 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -5167,17 +5167,24 @@ vim_tempname(
 # ifdef MSWIN
     WCHAR	wszTempFile[_MAX_PATH + 1];
     WCHAR	buf4[4];
+    WCHAR	*chartab = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
     char_u	*retval;
     char_u	*p;
+    long	i;
 
     wcscpy(itmp, L"");
     if (GetTempPathW(_MAX_PATH, wszTempFile) == 0)
     {
 	wszTempFile[0] = L'.';	// GetTempPathW() failed, use current dir
-	wszTempFile[1] = NUL;
+	wszTempFile[1] = L'\\';
+	wszTempFile[2] = NUL;
     }
     wcscpy(buf4, L"VIM");
-    buf4[2] = extra_char;   // make it "VIa", "VIb", etc.
+
+    // randomize the name to avoid collisions
+    i = mch_get_pid() + extra_char;
+    buf4[1] = chartab[i % 36];
+    buf4[2] = chartab[101 * i % 36];
     if (GetTempFileNameW(wszTempFile, buf4, 0, itmp) == 0)
 	return NULL;
     if (!keep)
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2055,
+/**/
     2054,
 /**/
     2053,