Mercurial > vim
diff src/tag.c @ 26518:13ba00ef7687 v8.2.3788
patch 8.2.3788: lambda for option that is a function may be freed
Commit: https://github.com/vim/vim/commit/6ae8fae8696623b527c7fb22567f6a3705b2f0dd
Author: Yegappan Lakshmanan <yegappan@yahoo.com>
Date: Sun Dec 12 16:26:44 2021 +0000
patch 8.2.3788: lambda for option that is a function may be freed
Problem: Lambda for option that is a function may be garbage collected.
Solution: Set a reference in the funcref. (Yegappan Lakshmanan,
closes #9330)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 12 Dec 2021 17:30:04 +0100 |
parents | 08e3eee541ac |
children | 06a137af96f8 |
line wrap: on
line diff
--- a/src/tag.c +++ b/src/tag.c @@ -133,15 +133,31 @@ set_tagfunc_option(void) return OK; } -# if defined(EXITFREE) || defined(PROTO) +#if defined(EXITFREE) || defined(PROTO) void free_tagfunc_option(void) { -# ifdef FEAT_EVAL +# ifdef FEAT_EVAL free_callback(&tfu_cb); -# endif +# endif } -# endif +#endif + +/* + * Mark the global 'tagfunc' callback with 'copyID' so that it is not garbage + * collected. + */ + int +set_ref_in_tagfunc(int copyID UNUSED) +{ + int abort = FALSE; + +#ifdef FEAT_EVAL + abort = set_ref_in_callback(&tfu_cb, copyID); +#endif + + return abort; +} /* * Copy the global 'tagfunc' callback function to the buffer-local 'tagfunc'