diff options
-rw-r--r-- | src/nvim/statusline.c | 2 | ||||
-rw-r--r-- | test/functional/api/vim_spec.lua | 11 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/nvim/statusline.c b/src/nvim/statusline.c index cb5dde1013..3171ee1605 100644 --- a/src/nvim/statusline.c +++ b/src/nvim/statusline.c @@ -1323,7 +1323,7 @@ int build_stl_str_hl(win_T *wp, char *out, size_t outlen, char *fmt, char *opt_n } stl_items[curitem].type = ClickFunc; stl_items[curitem].start = out_p; - stl_items[curitem].cmd = xmemdupz(t, (size_t)(fmt_p - t)); + stl_items[curitem].cmd = tabtab ? xmemdupz(t, (size_t)(fmt_p - t)) : NULL; stl_items[curitem].minwid = minwid; fmt_p++; curitem++; diff --git a/test/functional/api/vim_spec.lua b/test/functional/api/vim_spec.lua index 68003e918b..d1314216e2 100644 --- a/test/functional/api/vim_spec.lua +++ b/test/functional/api/vim_spec.lua @@ -3211,6 +3211,17 @@ describe('API', function() 'TextWithNoHighlight%#WarningMsg#TextWithWarningHighlight', { use_winbar = true, highlights = true })) end) + it('no memory leak with click functions', function() + meths.eval_statusline('%@ClickFunc@StatusLineStringWithClickFunc%T', {}) + eq({ + str = 'StatusLineStringWithClickFunc', + width = 29 + }, + meths.eval_statusline( + '%@ClickFunc@StatusLineStringWithClickFunc%T', + {}) + ) + end) end) end) describe('nvim_parse_cmd', function() |