235 lines
8.1 KiB
Plaintext
235 lines
8.1 KiB
Plaintext
To: vim_dev@googlegroups.com
|
|
Subject: Patch 7.3.715
|
|
Fcc: outbox
|
|
From: Bram Moolenaar <Bram@moolenaar.net>
|
|
Mime-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
------------
|
|
|
|
Patch 7.3.715
|
|
Problem: Crash when calling setloclist() in BufUnload autocmd. (Marcin
|
|
Szamotulski)
|
|
Solution: Set w_llist to NULL when it was freed. Also add a test.
|
|
(Christian Brabandt)
|
|
Files: src/quickfix.c, src/testdir/test49.ok, src/testdir/test49.vim
|
|
|
|
|
|
*** ../vim-7.3.714/src/quickfix.c 2012-06-29 12:57:03.000000000 +0200
|
|
--- src/quickfix.c 2012-11-14 22:33:20.000000000 +0100
|
|
***************
|
|
*** 107,113 ****
|
|
};
|
|
|
|
static int qf_init_ext __ARGS((qf_info_T *qi, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title));
|
|
! static void qf_new_list __ARGS((qf_info_T *qi, char_u *qf_title));
|
|
static void ll_free_all __ARGS((qf_info_T **pqi));
|
|
static int qf_add_entry __ARGS((qf_info_T *qi, qfline_T **prevp, char_u *dir, char_u *fname, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid));
|
|
static qf_info_T *ll_new_list __ARGS((void));
|
|
--- 107,113 ----
|
|
};
|
|
|
|
static int qf_init_ext __ARGS((qf_info_T *qi, char_u *efile, buf_T *buf, typval_T *tv, char_u *errorformat, int newlist, linenr_T lnumfirst, linenr_T lnumlast, char_u *qf_title));
|
|
! static void qf_new_list __ARGS((qf_info_T *qi, char_u *qf_title, win_T *wp));
|
|
static void ll_free_all __ARGS((qf_info_T **pqi));
|
|
static int qf_add_entry __ARGS((qf_info_T *qi, qfline_T **prevp, char_u *dir, char_u *fname, int bufnum, char_u *mesg, long lnum, int col, int vis_col, char_u *pattern, int nr, int type, int valid));
|
|
static qf_info_T *ll_new_list __ARGS((void));
|
|
***************
|
|
*** 266,272 ****
|
|
|
|
if (newlist || qi->qf_curlist == qi->qf_listcount)
|
|
/* make place for a new list */
|
|
! qf_new_list(qi, qf_title);
|
|
else if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
|
/* Adding to existing list, find last entry. */
|
|
for (qfprev = qi->qf_lists[qi->qf_curlist].qf_start;
|
|
--- 266,272 ----
|
|
|
|
if (newlist || qi->qf_curlist == qi->qf_listcount)
|
|
/* make place for a new list */
|
|
! qf_new_list(qi, qf_title, curwin);
|
|
else if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
|
/* Adding to existing list, find last entry. */
|
|
for (qfprev = qi->qf_lists[qi->qf_curlist].qf_start;
|
|
***************
|
|
*** 885,893 ****
|
|
* Prepare for adding a new quickfix list.
|
|
*/
|
|
static void
|
|
! qf_new_list(qi, qf_title)
|
|
qf_info_T *qi;
|
|
char_u *qf_title;
|
|
{
|
|
int i;
|
|
|
|
--- 885,894 ----
|
|
* Prepare for adding a new quickfix list.
|
|
*/
|
|
static void
|
|
! qf_new_list(qi, qf_title, wp)
|
|
qf_info_T *qi;
|
|
char_u *qf_title;
|
|
+ win_T *wp;
|
|
{
|
|
int i;
|
|
|
|
***************
|
|
*** 897,903 ****
|
|
--- 898,908 ----
|
|
* way with ":grep'.
|
|
*/
|
|
while (qi->qf_listcount > qi->qf_curlist + 1)
|
|
+ {
|
|
+ if (wp != NULL && wp->w_llist == qi)
|
|
+ wp->w_llist = NULL;
|
|
qf_free(qi, --qi->qf_listcount);
|
|
+ }
|
|
|
|
/*
|
|
* When the stack is full, remove to oldest entry
|
|
***************
|
|
*** 905,910 ****
|
|
--- 910,917 ----
|
|
*/
|
|
if (qi->qf_listcount == LISTCOUNT)
|
|
{
|
|
+ if (wp != NULL && wp->w_llist == qi)
|
|
+ wp->w_llist = NULL;
|
|
qf_free(qi, 0);
|
|
for (i = 1; i < LISTCOUNT; ++i)
|
|
qi->qf_lists[i - 1] = qi->qf_lists[i];
|
|
***************
|
|
*** 3181,3187 ****
|
|
eap->cmdidx != CMD_vimgrepadd && eap->cmdidx != CMD_lvimgrepadd)
|
|
|| qi->qf_curlist == qi->qf_listcount)
|
|
/* make place for a new list */
|
|
! qf_new_list(qi, *eap->cmdlinep);
|
|
else if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
|
/* Adding to existing list, find last entry. */
|
|
for (prevp = qi->qf_lists[qi->qf_curlist].qf_start;
|
|
--- 3188,3194 ----
|
|
eap->cmdidx != CMD_vimgrepadd && eap->cmdidx != CMD_lvimgrepadd)
|
|
|| qi->qf_curlist == qi->qf_listcount)
|
|
/* make place for a new list */
|
|
! qf_new_list(qi, *eap->cmdlinep, curwin);
|
|
else if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
|
/* Adding to existing list, find last entry. */
|
|
for (prevp = qi->qf_lists[qi->qf_curlist].qf_start;
|
|
***************
|
|
*** 3747,3753 ****
|
|
|
|
if (action == ' ' || qi->qf_curlist == qi->qf_listcount)
|
|
/* make place for a new list */
|
|
! qf_new_list(qi, title);
|
|
else if (action == 'a' && qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
|
/* Adding to existing list, find last entry. */
|
|
for (prevp = qi->qf_lists[qi->qf_curlist].qf_start;
|
|
--- 3754,3760 ----
|
|
|
|
if (action == ' ' || qi->qf_curlist == qi->qf_listcount)
|
|
/* make place for a new list */
|
|
! qf_new_list(qi, title, wp);
|
|
else if (action == 'a' && qi->qf_lists[qi->qf_curlist].qf_count > 0)
|
|
/* Adding to existing list, find last entry. */
|
|
for (prevp = qi->qf_lists[qi->qf_curlist].qf_start;
|
|
***************
|
|
*** 4029,4035 ****
|
|
#endif
|
|
|
|
/* create a new quickfix list */
|
|
! qf_new_list(qi, *eap->cmdlinep);
|
|
|
|
/* Go through all directories in 'runtimepath' */
|
|
p = p_rtp;
|
|
--- 4036,4042 ----
|
|
#endif
|
|
|
|
/* create a new quickfix list */
|
|
! qf_new_list(qi, *eap->cmdlinep, wp);
|
|
|
|
/* Go through all directories in 'runtimepath' */
|
|
p = p_rtp;
|
|
*** ../vim-7.3.714/src/testdir/test49.ok 2010-08-15 21:57:29.000000000 +0200
|
|
--- src/testdir/test49.ok 2012-11-14 22:26:13.000000000 +0100
|
|
***************
|
|
*** 85,92 ****
|
|
*** Test 83: OK (2835)
|
|
*** Test 84: OK (934782101)
|
|
*** Test 85: OK (198689)
|
|
! --- Test 86: All tests were run with throwing exceptions on error.
|
|
The $VIMNOERRTHROW control is not configured.
|
|
! --- Test 86: All tests were run with throwing exceptions on interrupt.
|
|
The $VIMNOINTTHROW control is not configured.
|
|
! *** Test 86: OK (50443995)
|
|
--- 85,94 ----
|
|
*** Test 83: OK (2835)
|
|
*** Test 84: OK (934782101)
|
|
*** Test 85: OK (198689)
|
|
! --- Test 86: No Crash for vimgrep on BufUnload
|
|
! *** Test 86: OK (0)
|
|
! --- Test 87: All tests were run with throwing exceptions on error.
|
|
The $VIMNOERRTHROW control is not configured.
|
|
! --- Test 87: All tests were run with throwing exceptions on interrupt.
|
|
The $VIMNOINTTHROW control is not configured.
|
|
! *** Test 87: OK (50443995)
|
|
*** ../vim-7.3.714/src/testdir/test49.vim 2010-09-29 16:55:45.000000000 +0200
|
|
--- src/testdir/test49.vim 2012-11-14 22:26:13.000000000 +0100
|
|
***************
|
|
*** 9603,9611 ****
|
|
|
|
Xcheck 198689
|
|
|
|
|
|
"-------------------------------------------------------------------------------
|
|
! " Test 86: $VIMNOERRTHROW and $VIMNOINTTHROW support {{{1
|
|
"
|
|
" It is possible to configure Vim for throwing exceptions on error
|
|
" or interrupt, controlled by variables $VIMNOERRTHROW and
|
|
--- 9603,9630 ----
|
|
|
|
Xcheck 198689
|
|
|
|
+ "-------------------------------------------------------------------------------
|
|
+ " Test 86 setloclist crash {{{1
|
|
+ "
|
|
+ " Executing a setloclist() on BufUnload shouldn't crash Vim
|
|
+ "-------------------------------------------------------------------------------
|
|
+
|
|
+ func F
|
|
+ au BufUnload * :call setloclist(0, [{'bufnr':1, 'lnum':1, 'col':1, 'text': 'tango down'}])
|
|
+
|
|
+ :lvimgrep /.*/ *
|
|
+ endfunc
|
|
+
|
|
+ XpathINIT
|
|
+
|
|
+ ExecAsScript F
|
|
+
|
|
+ delfunction F
|
|
+ Xout "No Crash for vimgrep on BufUnload"
|
|
+ Xcheck 0
|
|
|
|
"-------------------------------------------------------------------------------
|
|
! " Test 87: $VIMNOERRTHROW and $VIMNOINTTHROW support {{{1
|
|
"
|
|
" It is possible to configure Vim for throwing exceptions on error
|
|
" or interrupt, controlled by variables $VIMNOERRTHROW and
|
|
*** ../vim-7.3.714/src/version.c 2012-11-14 20:52:22.000000000 +0100
|
|
--- src/version.c 2012-11-14 22:36:45.000000000 +0100
|
|
***************
|
|
*** 727,728 ****
|
|
--- 727,730 ----
|
|
{ /* Add new patch number below this line */
|
|
+ /**/
|
|
+ 715,
|
|
/**/
|
|
|
|
--
|
|
One difference between a man and a machine is that a machine is quiet
|
|
when well oiled.
|
|
|
|
/// Bram Moolenaar -- Bram@Moolenaar.net -- 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 ///
|