Skip to content

Commit

Permalink
patch 8.2.0132: script may be re-used when deleting and creating a ne…
Browse files Browse the repository at this point in the history
…w one

Problem:    Script may be re-used when deleting and creating a new one.
Solution:   When the inode matches, also check the file name.
  • Loading branch information
brammool committed Jan 19, 2020
1 parent 479950f commit ca33eb2
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 10 deletions.
22 changes: 12 additions & 10 deletions src/scriptfile.c
Expand Up @@ -1249,18 +1249,20 @@ do_source(
--current_sctx.sc_sid)
{
si = &SCRIPT_ITEM(current_sctx.sc_sid);
if (si->sn_name != NULL
&& (
if (si->sn_name != NULL)
{
# ifdef UNIX
// Compare dev/ino when possible, it catches symbolic
// links. Also compare file names, the inode may change
// when the file was edited.
((stat_ok && si->sn_dev_valid)
&& (si->sn_dev == st.st_dev
&& si->sn_ino == st.st_ino)) ||
// Compare dev/ino when possible, it catches symbolic links. Also
// compare file names, the inode may change when the file was
// edited or it may be re-used for another script (esp. in tests).
if ((stat_ok && si->sn_dev_valid)
&& (si->sn_dev != st.st_dev || si->sn_ino != st.st_ino))
continue;
# endif
fnamecmp(si->sn_name, fname_exp) == 0))
break;
if (fnamecmp(si->sn_name, fname_exp) == 0)
// Found it!
break;
}
}
if (current_sctx.sc_sid == 0)
{
Expand Down
12 changes: 12 additions & 0 deletions src/testdir/test_source.vim
Expand Up @@ -46,3 +46,15 @@ func Test_source_sandbox()
bwipe!
call delete('Xsourcehello')
endfunc

" When deleting a file and immediately creating a new one the inode may be
" recycled. Vim should not recognize it as the same script.
func Test_different_script()
call ch_logfile('logfile', 'w')
call writefile(['let s:var = "asdf"'], 'XoneScript')
source XoneScript
call delete('XoneScript')
call writefile(['let g:var = s:var'], 'XtwoScript')
call assert_fails('source XtwoScript', 'E121:')
call delete('XtwoScript')
endfunc
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -742,6 +742,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
132,
/**/
131,
/**/
Expand Down

0 comments on commit ca33eb2

Please sign in to comment.