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:
parent
479950f6c9
commit
ca33eb256e
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -742,6 +742,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
132,
|
||||
/**/
|
||||
131,
|
||||
/**/
|
||||
|
Loading…
x
Reference in New Issue
Block a user