1
0
forked from aniani/vim

patch 7.4.1592

Problem:    Quickfix code using memory after being freed. (Dominique Pelle)
Solution:   Detect that the window was closed. (Hirohito Higashi)
This commit is contained in:
Bram Moolenaar 2016-03-19 13:35:03 +01:00
parent 5584df65a0
commit 0899d69803
3 changed files with 38 additions and 3 deletions

View File

@ -1795,8 +1795,19 @@ win_found:
oldwin == curwin ? curwin : NULL);
}
else
{
ok = buflist_getfile(qf_ptr->qf_fnum,
(linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
if (qi != &ql_info && !win_valid(oldwin))
{
EMSG(_("E924: Current window was closed"));
ok = FALSE;
qi = NULL;
qf_ptr = NULL;
opened_window = FALSE;
}
}
}
if (ok == OK)
@ -1899,7 +1910,7 @@ win_found:
if (opened_window)
win_close(curwin, TRUE); /* Close opened window */
#endif
if (qf_ptr->qf_fnum != 0)
if (qf_ptr != NULL && qf_ptr->qf_fnum != 0)
{
/*
* Couldn't open file, so put index back where it was. This could
@ -1913,8 +1924,11 @@ failed:
}
}
theend:
qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
if (qi != NULL)
{
qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
}
#ifdef FEAT_WINDOWS
if (p_swb != old_swb && opened_window)
{

View File

@ -495,3 +495,22 @@ function Test_locationlist()
augroup! testgroup
endfunction
function Test_locationlist_curwin_was_closed()
augroup testgroup
au!
autocmd BufReadCmd t call R(expand("<amatch>"))
augroup END
function R(n)
quit
endfunc
new
let q = []
call add(q, {'filename': 't' })
call setloclist(0, q)
call assert_fails('lrewind', 'E924:')
augroup! testgroup
endfunction

View File

@ -748,6 +748,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1592,
/**/
1591,
/**/