mirror of
https://github.com/vim/vim.git
synced 2025-07-25 10:54:51 -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)
|
--current_sctx.sc_sid)
|
||||||
{
|
{
|
||||||
si = &SCRIPT_ITEM(current_sctx.sc_sid);
|
si = &SCRIPT_ITEM(current_sctx.sc_sid);
|
||||||
if (si->sn_name != NULL
|
if (si->sn_name != NULL)
|
||||||
&& (
|
{
|
||||||
# ifdef UNIX
|
# ifdef UNIX
|
||||||
// Compare dev/ino when possible, it catches symbolic
|
// Compare dev/ino when possible, it catches symbolic links. Also
|
||||||
// links. Also compare file names, the inode may change
|
// compare file names, the inode may change when the file was
|
||||||
// when the file was edited.
|
// edited or it may be re-used for another script (esp. in tests).
|
||||||
((stat_ok && si->sn_dev_valid)
|
if ((stat_ok && si->sn_dev_valid)
|
||||||
&& (si->sn_dev == st.st_dev
|
&& (si->sn_dev != st.st_dev || si->sn_ino != st.st_ino))
|
||||||
&& si->sn_ino == st.st_ino)) ||
|
continue;
|
||||||
# endif
|
# endif
|
||||||
fnamecmp(si->sn_name, fname_exp) == 0))
|
if (fnamecmp(si->sn_name, fname_exp) == 0)
|
||||||
break;
|
// Found it!
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (current_sctx.sc_sid == 0)
|
if (current_sctx.sc_sid == 0)
|
||||||
{
|
{
|
||||||
|
@ -46,3 +46,15 @@ func Test_source_sandbox()
|
|||||||
bwipe!
|
bwipe!
|
||||||
call delete('Xsourcehello')
|
call delete('Xsourcehello')
|
||||||
endfunc
|
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[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
132,
|
||||||
/**/
|
/**/
|
||||||
131,
|
131,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user