diff options
-rw-r--r-- | src/nvim/autocmd.c | 7 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 2 | ||||
-rw-r--r-- | test/old/testdir/test_arglist.vim | 25 |
3 files changed, 30 insertions, 4 deletions
diff --git a/src/nvim/autocmd.c b/src/nvim/autocmd.c index c00a5814b1..1246b2fc5c 100644 --- a/src/nvim/autocmd.c +++ b/src/nvim/autocmd.c @@ -700,12 +700,13 @@ int check_ei(char *ei) // Returns the old value of 'eventignore' in allocated memory. char *au_event_disable(char *what) { - char *save_ei = xstrdup(p_ei); - char *new_ei = xstrnsave(p_ei, strlen(p_ei) + strlen(what)); + size_t p_ei_len = strlen(p_ei); + char *save_ei = xmemdupz(p_ei, p_ei_len); + char *new_ei = xstrnsave(p_ei, p_ei_len + strlen(what)); if (*what == ',' && *p_ei == NUL) { STRCPY(new_ei, what + 1); } else { - strcat(new_ei, what); + STRCPY(new_ei + p_ei_len, what); } set_option_direct(kOptEventignore, CSTR_AS_OPTVAL(new_ei), 0, SID_NONE); xfree(new_ei); diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 240bdae6cb..22b5d7accd 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -4528,7 +4528,7 @@ static int open_cmdwin(void) State = MODE_NORMAL; setmouse(); - // Reset here so it can be set by a CmdWinEnter autocommand. + // Reset here so it can be set by a CmdwinEnter autocommand. cmdwin_result = 0; // Trigger CmdwinEnter autocommands. diff --git a/test/old/testdir/test_arglist.vim b/test/old/testdir/test_arglist.vim index 952b121aed..9c4d4bb715 100644 --- a/test/old/testdir/test_arglist.vim +++ b/test/old/testdir/test_arglist.vim @@ -555,9 +555,34 @@ endfunc func Test_argdo() next! Xa.c Xb.c Xc.c new + + let g:bufenter = 0 + let g:bufleave = 0 + autocmd BufEnter * let g:bufenter += 1 + autocmd BufLeave * let g:bufleave += 1 + + let l = [] + argdo call add(l, expand('%')) + call assert_equal(['Xa.c', 'Xb.c', 'Xc.c'], l) + call assert_equal(3, g:bufenter) + call assert_equal(3, g:bufleave) + + let g:bufenter = 0 + let g:bufleave = 0 + + set eventignore=BufEnter,BufLeave let l = [] argdo call add(l, expand('%')) call assert_equal(['Xa.c', 'Xb.c', 'Xc.c'], l) + call assert_equal(0, g:bufenter) + call assert_equal(0, g:bufleave) + call assert_equal('BufEnter,BufLeave', &eventignore) + set eventignore& + + autocmd! BufEnter + autocmd! BufLeave + unlet g:bufenter + unlet g:bufleave bwipe Xa.c Xb.c Xc.c endfunc |