From 2472a74be4dedfeaff22314f31cf9787618163d1 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 26 Nov 2020 19:47:28 +0100 Subject: [PATCH] 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 #7378) --- src/fileio.c | 11 +++++++++-- src/version.c | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/fileio.c b/src/fileio.c index 27e9aaecf..66061680b 100644 --- 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) diff --git a/src/version.c b/src/version.c index 7b7bea9ee..8c4c3fa66 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2055, /**/ 2054, /**/ -- 2.40.0