Skip to content

Commit

Permalink
patch 9.0.0260: using freed memory when using 'quickfixtextfunc' recu…
Browse files Browse the repository at this point in the history
…rsively

Problem:    Using freed memory when using 'quickfixtextfunc' recursively.
Solution:   Do not allow for recursion.
  • Loading branch information
brammool committed Aug 24, 2022
1 parent 8052575 commit d6c6762
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/quickfix.c
Expand Up @@ -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
Expand All @@ -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);
Expand All @@ -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;
}

Expand Down
13 changes: 13 additions & 0 deletions src/testdir/test_quickfix.vim
Expand Up @@ -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
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -731,6 +731,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
260,
/**/
259,
/**/
Expand Down

0 comments on commit d6c6762

Please sign in to comment.