0
0
mirror of https://github.com/vim/vim.git synced 2025-07-24 10:45:12 -04:00

patch 8.2.0132: script may be re-used when deleting and creating a new one

Problem:    Script may be re-used when deleting and creating a new one.
Solution:   When the inode matches, also check the file name.
This commit is contained in:
Bram Moolenaar 2020-01-19 20:18:09 +01:00
parent 479950f6c9
commit ca33eb256e
3 changed files with 26 additions and 10 deletions

View File

@ -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)
{

View File

@ -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

View File

@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
132,
/**/
131,
/**/