0
0
mirror of https://github.com/vim/vim.git synced 2025-09-25 03:54:15 -04:00

patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recursively

Problem:    Using freed memory when using 'quickfixtextfunc' recursively.
Solution:   Do not allow for recursion.
This commit is contained in:
Bram Moolenaar
2022-08-24 20:07:22 +01:00
parent 80525751c5
commit d6c67629ed
3 changed files with 24 additions and 0 deletions

View File

@@ -4674,6 +4674,11 @@ call_qftf_func(qf_list_T *qfl, int qf_winid, long start_idx, long end_idx)
{
callback_T *cb = &qftf_cb;
list_T *qftf_list = NULL;
static int recursive = FALSE;
if (recursive)
return NULL; // this doesn't work properly recursively
recursive = TRUE;
// If 'quickfixtextfunc' is set, then use the user-supplied function to get
// the text to display. Use the local value of 'quickfixtextfunc' if it is
@@ -4688,7 +4693,10 @@ call_qftf_func(qf_list_T *qfl, int qf_winid, long start_idx, long end_idx)
// create the dict argument
if ((d = dict_alloc_lock(VAR_FIXED)) == NULL)
{
recursive = FALSE;
return NULL;
}
dict_add_number(d, "quickfix", (long)IS_QF_LIST(qfl));
dict_add_number(d, "winid", (long)qf_winid);
dict_add_number(d, "id", (long)qfl->qf_id);
@@ -4711,6 +4719,7 @@ call_qftf_func(qf_list_T *qfl, int qf_winid, long start_idx, long end_idx)
dict_unref(d);
}
recursive = FALSE;
return qftf_list;
}

View File

@@ -6351,4 +6351,17 @@ func Test_qflist_statusmsg()
%bw!
endfunc
func Test_quickfixtextfunc_recursive()
func s:QFTfunc(o)
cgete '0'
endfunc
copen
let &quickfixtextfunc = 's:QFTfunc'
cex ""
let &quickfixtextfunc = ''
cclose
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

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