1
0
forked from aniani/vim

patch 8.1.1371: cannot recover from a swap file

Problem:    Cannot recover from a swap file.
Solution:   Do not expand environment variables in the swap file name.
            Do not check the extension when we already know a file is a swap
            file.  (Ken Takata, closes 4415, closes #4369)
This commit is contained in:
Bram Moolenaar
2019-05-23 21:35:48 +02:00
parent 05b8b07e27
commit 99499b1c05
18 changed files with 168 additions and 64 deletions

View File

@@ -2691,13 +2691,15 @@ home_replace_save(
* FPC_DIFF if they both exist and are different files.
* FPC_NOTX if they both don't exist.
* FPC_DIFFX if one of them doesn't exist.
* For the first name environment variables are expanded
* For the first name environment variables are expanded if "expandenv" is
* TRUE.
*/
int
fullpathcmp(
char_u *s1,
char_u *s2,
int checkname) /* when both don't exist, check file names */
int checkname, // when both don't exist, check file names
int expandenv)
{
#ifdef UNIX
char_u exp1[MAXPATHL];
@@ -2706,7 +2708,10 @@ fullpathcmp(
stat_T st1, st2;
int r1, r2;
expand_env(s1, exp1, MAXPATHL);
if (expandenv)
expand_env(s1, exp1, MAXPATHL);
else
vim_strncpy(exp1, s1, MAXPATHL - 1);
r1 = mch_stat((char *)exp1, &st1);
r2 = mch_stat((char *)s2, &st2);
if (r1 != 0 && r2 != 0)
@@ -2741,7 +2746,10 @@ fullpathcmp(
full1 = exp1 + MAXPATHL;
full2 = full1 + MAXPATHL;
expand_env(s1, exp1, MAXPATHL);
if (expandenv)
expand_env(s1, exp1, MAXPATHL);
else
vim_strncpy(exp1, s1, MAXPATHL - 1);
r1 = vim_FullName(exp1, full1, MAXPATHL, FALSE);
r2 = vim_FullName(s2, full2, MAXPATHL, FALSE);
@@ -4027,7 +4035,7 @@ gen_expand_wildcards(
/*
* First expand environment variables, "~/" and "~user/".
*/
if (has_env_var(p) || *p == '~')
if ((has_env_var(p) && !(flags & EW_NOTENV)) || *p == '~')
{
p = expand_env_save_opt(p, TRUE);
if (p == NULL)