]> granicus.if.org Git - vim/commitdiff
patch 8.2.3884: crash when clearing the argument list while using it v8.2.3884
authorBram Moolenaar <Bram@vim.org>
Fri, 24 Dec 2021 18:11:27 +0000 (18:11 +0000)
committerBram Moolenaar <Bram@vim.org>
Fri, 24 Dec 2021 18:11:27 +0000 (18:11 +0000)
Problem:    Crash when clearing the argument list while using it.
Solution:   Lock the argument list for ":all".

src/arglist.c
src/testdir/test_arglist.vim
src/version.c

index 24b0a870e215ec0bfc0a6bd706e6df3073820115..af8ce740fcd7dfa17ba636304e9323f3bcf0d9e5 100644 (file)
@@ -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;
 
index b1f292975a9cd2877a9be616a370a8325fcde2c7..d29a228e6cba100ef9dd93c3413b9b83be745169 100644 (file)
@@ -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
index 05b8120a98c7f56365ee3211a6d0074345b009bb..7277d2f092ecbb2cc4bc94cfdf0f562ca6d1c634 100644 (file)
@@ -749,6 +749,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    3884,
 /**/
     3883,
 /**/