Patch 8.1.0489
Problem:    Crash when autocmd clears vimpgrep location list.
Solution:   Return from qf_jump_edit_buffer() early. (Yegappan Lakshmanan)
Files:      src/quickfix.c, src/testdir/test_quickfix.vim


*** ../vim-8.1.0488/src/quickfix.c      2018-10-20 20:53:58.143284832 +0200
--- src/quickfix.c      2018-10-21 18:43:52.324236213 +0200
***************
*** 2985,2990 ****
--- 2985,2992 ----
  {
      qf_list_T *qfl = &qi->qf_lists[qi->qf_curlist];
      int               retval = OK;
+     int               old_qf_curlist = qi->qf_curlist;
+     int               save_qfid = qfl->qf_id;
  
      if (qf_ptr->qf_type == 1)
      {
***************
*** 2993,3038 ****
        if (!can_abandon(curbuf, forceit))
        {
            no_write_message();
!           retval = FAIL;
        }
!       else
!           retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
!                   ECMD_HIDE + ECMD_SET_HELP,
!                   oldwin == curwin ? curwin : NULL);
      }
      else
-     {
-       int old_qf_curlist = qi->qf_curlist;
-       int save_qfid = qfl->qf_id;
- 
        retval = buflist_getfile(qf_ptr->qf_fnum,
                (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
  
!       if (IS_LL_STACK(qi))
!       {
!           // Location list. Check whether the associated window is still
!           // present and the list is still valid.
!           if (!win_valid_any_tab(oldwin))
!           {
!               EMSG(_("E924: Current window was closed"));
!               *opened_window = FALSE;
!               return NOTDONE;
!           }
!           else if (!qflist_valid(oldwin, save_qfid))
!           {
!               EMSG(_(e_loc_list_changed));
!               return NOTDONE;
!           }
!       }
!       else if (old_qf_curlist != qi->qf_curlist
!               || !is_qf_entry_present(qfl, qf_ptr))
!       {
!           if (IS_QF_STACK(qi))
!               EMSG(_("E925: Current quickfix was changed"));
!           else
!               EMSG(_(e_loc_list_changed));
!           return NOTDONE;
!       }
      }
  
      return retval;
--- 2995,3034 ----
        if (!can_abandon(curbuf, forceit))
        {
            no_write_message();
!           return FAIL;
        }
! 
!       retval = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
!               ECMD_HIDE + ECMD_SET_HELP,
!               oldwin == curwin ? curwin : NULL);
      }
      else
        retval = buflist_getfile(qf_ptr->qf_fnum,
                (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
  
!     // If a location list, check whether the associated window is still
!     // present.
!     if (IS_LL_STACK(qi) && !win_valid_any_tab(oldwin))
!     {
!       EMSG(_("E924: Current window was closed"));
!       *opened_window = FALSE;
!       return NOTDONE;
!     }
! 
!     if (IS_QF_STACK(qi) && !qflist_valid(NULL, save_qfid))
!     {
!       EMSG(_("E925: Current quickfix was changed"));
!       return NOTDONE;
!     }
! 
!     if (old_qf_curlist != qi->qf_curlist
!           || !is_qf_entry_present(qfl, qf_ptr))
!     {
!       if (IS_QF_STACK(qi))
!           EMSG(_("E925: Current quickfix was changed"));
!       else
!           EMSG(_(e_loc_list_changed));
!       return NOTDONE;
      }
  
      return retval;
*** ../vim-8.1.0488/src/testdir/test_quickfix.vim       2018-10-20 
20:53:58.147284793 +0200
--- src/testdir/test_quickfix.vim       2018-10-21 18:32:08.845255919 +0200
***************
*** 3255,3260 ****
--- 3255,3271 ----
    augroup QF_Test
      au!
    augroup END
+ 
+   new | only
+   augroup QF_Test
+     au!
+     au BufEnter * call setloclist(0, [], 'r')
+   augroup END
+   call assert_fails('lvimgrep Test_lvimgrep_crash *', 'E926:')
+   augroup QF_Test
+     au!
+   augroup END
+ 
    enew | only
  endfunc
  
***************
*** 3337,3342 ****
--- 3348,3384 ----
    call assert_equal('help', &filetype)
    call assert_equal(1, getloclist(0, {'nr' : '$'}).nr)
    au! QuickFixCmdPost
+ 
+   new | only
+   augroup QF_Test
+     au!
+     au BufEnter * call setqflist([], 'f')
+   augroup END
+   call assert_fails('helpgrep quickfix', 'E925:')
+   augroup QF_Test
+     au! BufEnter
+   augroup END
+ 
+   new | only
+   augroup QF_Test
+     au!
+     au BufEnter * call setqflist([], 'r')
+   augroup END
+   call assert_fails('helpgrep quickfix', 'E925:')
+   augroup QF_Test
+     au! BufEnter
+   augroup END
+ 
+   new | only
+   augroup QF_Test
+     au!
+     au BufEnter * call setloclist(0, [], 'r')
+   augroup END
+   call assert_fails('lhelpgrep quickfix', 'E926:')
+   augroup QF_Test
+     au! BufEnter
+   augroup END
+ 
    new | only
  endfunc
  
*** ../vim-8.1.0488/src/version.c       2018-10-20 20:53:58.147284793 +0200
--- src/version.c       2018-10-21 18:39:57.093915160 +0200
***************
*** 794,795 ****
--- 794,797 ----
  {   /* Add new patch number below this line */
+ /**/
+     489,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
247. You use www.switchboard.com instead of dialing 411 and 555-12-12
     for directory assistance.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui