1
0
forked from aniani/vim

patch 8.2.2420: too many problems with using all autocommand events

Problem:    Too many problems with using all autocommand events.
Solution:   Disallow defining an autocommand for all events.
This commit is contained in:
Bram Moolenaar 2021-01-28 13:47:59 +01:00
parent d697ddea14
commit 9a046fd08b
6 changed files with 23 additions and 27 deletions

View File

@ -956,11 +956,14 @@ do_autocmd(char_u *arg_in, int forceit)
last_group = AUGROUP_ERROR; // for listing the group name last_group = AUGROUP_ERROR; // for listing the group name
if (*arg == '*' || *arg == NUL || *arg == '|') if (*arg == '*' || *arg == NUL || *arg == '|')
{ {
for (event = (event_T)0; (int)event < (int)NUM_EVENTS; if (!forceit && *cmd != NUL)
event = (event_T)((int)event + 1)) emsg(_(e_cannot_define_autocommands_for_all_events));
if (do_autocmd_event(event, pat, else
once, nested, cmd, forceit, group) == FAIL) for (event = (event_T)0; (int)event < (int)NUM_EVENTS;
break; event = (event_T)((int)event + 1))
if (do_autocmd_event(event, pat,
once, nested, cmd, forceit, group) == FAIL)
break;
} }
else else
{ {

View File

@ -345,3 +345,5 @@ EXTERN char e_invalid_operation_for_bool[]
INIT(= N_("E1153: Invalid operation for bool")); INIT(= N_("E1153: Invalid operation for bool"));
EXTERN char e_divide_by_zero[] EXTERN char e_divide_by_zero[]
INIT(= N_("E1154: Divide by zero")); INIT(= N_("E1154: Divide by zero"));
EXTERN char e_cannot_define_autocommands_for_all_events[]
INIT(= N_("E1155: Cannot define autocommands for ALL events"));

View File

@ -1827,20 +1827,9 @@ func Test_TextYankPost()
bwipe! bwipe!
endfunc endfunc
func Test_nocatch_wipe_all_buffers() func Test_autocommand_all_events()
" Real nasty autocommand: wipe all buffers on any event. call assert_fails('au * * bwipe', 'E1155:')
au * * bwipe * call assert_fails('au * x bwipe', 'E1155:')
call assert_fails('next x', ['E94:', 'E937:'])
bwipe
au!
endfunc
func Test_nocatch_wipe_dummy_buffer()
CheckFeature quickfix
" Nasty autocommand: wipe buffer on any event.
au * x bwipe
call assert_fails('lv½ /x', 'E937:')
au!
endfunc endfunc
function s:Before_test_dirchanged() function s:Before_test_dirchanged()

View File

@ -3833,7 +3833,7 @@ func Test_lbuffer_crash()
sv Xtest sv Xtest
augroup QF_Test augroup QF_Test
au! au!
au * * bw au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * bw
augroup END augroup END
lbuffer lbuffer
augroup QF_Test augroup QF_Test
@ -3845,7 +3845,7 @@ endfunc
func Test_lexpr_crash() func Test_lexpr_crash()
augroup QF_Test augroup QF_Test
au! au!
au * * call setloclist(0, [], 'f') au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call setloclist(0, [], 'f')
augroup END augroup END
lexpr "" lexpr ""
augroup QF_Test augroup QF_Test
@ -3880,7 +3880,7 @@ func Test_lvimgrep_crash()
sv Xtest sv Xtest
augroup QF_Test augroup QF_Test
au! au!
au * * call setloclist(0, [], 'f') au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call setloclist(0, [], 'f')
augroup END augroup END
lvimgrep quickfix test_quickfix.vim lvimgrep quickfix test_quickfix.vim
augroup QF_Test augroup QF_Test
@ -4215,7 +4215,7 @@ func Test_lbuffer_with_bwipe()
new new
new new
augroup nasty augroup nasty
au * * bwipe au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * bwipe
augroup END augroup END
lbuffer lbuffer
augroup nasty augroup nasty
@ -4228,9 +4228,9 @@ endfunc
func Xexpr_acmd_freelist(cchar) func Xexpr_acmd_freelist(cchar)
call s:setup_commands(a:cchar) call s:setup_commands(a:cchar)
" This was using freed memory. " This was using freed memory (but with what events?)
augroup nasty augroup nasty
au * * call g:Xsetlist([], 'f') au QuickFixCmdPre,QuickFixCmdPost,BufEnter,BufLeave * call g:Xsetlist([], 'f')
augroup END augroup END
Xexpr "x" Xexpr "x"
augroup nasty augroup nasty

View File

@ -567,8 +567,8 @@ endfunc
func Test_access_freed_mem() func Test_access_freed_mem()
call assert_equal(&columns, winwidth(0)) call assert_equal(&columns, winwidth(0))
" This was accessing freed memory " This was accessing freed memory (but with what events?)
au * 0 vs xxx au BufEnter,BufLeave,WinEnter,WinLeave 0 vs xxx
arg 0 arg 0
argadd argadd
call assert_fails("all", "E242:") call assert_fails("all", "E242:")

View File

@ -750,6 +750,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 */
/**/
2420,
/**/ /**/
2419, 2419,
/**/ /**/