fix(filetype): avoid recursive FileType autocmds (#22813)

This commit is contained in:
Lewis Russell
2023-03-29 19:54:12 +01:00
committed by GitHub
parent 92005db760
commit 8b7fb668e4
3 changed files with 42 additions and 36 deletions

View File

@@ -2758,3 +2758,32 @@ void do_autocmd_focusgained(bool gained)
recursive = false;
}
void do_filetype_autocmd(buf_T *buf, bool force)
{
static bool recursive = false;
if (recursive && !force) {
return; // disallow recursion
}
char **varp = &buf->b_p_ft;
int secure_save = secure;
// Reset the secure flag, since the value of 'filetype' has
// been checked to be safe.
secure = 0;
recursive = true;
did_filetype = true;
// Only pass true for "force" when it is true or
// used recursively, to avoid endless recurrence.
apply_autocmds(EVENT_FILETYPE, buf->b_p_ft, buf->b_fname, force, buf);
recursive = false;
// Just in case the old "buf" is now invalid
if (varp != &(buf->b_p_ft)) {
varp = NULL;
}
secure = secure_save;
}