From: Bram Moolenaar Date: Fri, 24 Dec 2021 18:11:27 +0000 (+0000) Subject: patch 8.2.3884: crash when clearing the argument list while using it X-Git-Tag: v8.2.3884 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6f98371532fcff911b462d51bc64f2ce8a6ae682;p=vim patch 8.2.3884: crash when clearing the argument list while using it Problem: Crash when clearing the argument list while using it. Solution: Lock the argument list for ":all". --- diff --git a/src/arglist.c b/src/arglist.c index 24b0a870e..af8ce740f 100644 --- a/src/arglist.c +++ b/src/arglist.c @@ -910,6 +910,7 @@ do_arg_all( tabpage_T *old_curtab, *last_curtab; win_T *new_curwin = NULL; tabpage_T *new_curtab = NULL; + int prev_arglist_locked = arglist_locked; #ifdef FEAT_CMDWIN if (cmdwin_type != 0) @@ -936,6 +937,7 @@ do_arg_all( // watch out for its size to be changed. alist = curwin->w_alist; ++alist->al_refcount; + arglist_locked = TRUE; old_curwin = curwin; old_curtab = curtab; @@ -1155,6 +1157,7 @@ do_arg_all( // Remove the "lock" on the argument list. alist_unlink(alist); + arglist_locked = prev_arglist_locked; --autocmd_no_enter; diff --git a/src/testdir/test_arglist.vim b/src/testdir/test_arglist.vim index b1f292975..d29a228e6 100644 --- a/src/testdir/test_arglist.vim +++ b/src/testdir/test_arglist.vim @@ -583,4 +583,11 @@ func Test_all_not_allowed_from_cmdwin() au! BufEnter endfunc +func Test_clear_arglist_in_all() + n 0 00 000 0000 00000 000000 + au! * 0 n 0 + all + au! * +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c index 05b8120a9..7277d2f09 100644 --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 3884, /**/ 3883, /**/