# HG changeset patch # User Bram Moolenaar # Date 1606417206 -3600 # Node ID d80faed40bec437c73ac0300bc6ee477b7bca009 # Parent 7f40dcbf922205c19ad496d93502c67bcdddfa27 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 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) diff --git a/src/fileio.c b/src/fileio.c --- 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 --- 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,