vim-patch:9.1.1331: Leaking memory with cmdcomplete()

Problem:  Leaking memory with cmdcomplete()
          (zeertzjq, after v9.1.1329)
Solution: free the memory (Girish Palya)

closes: vim/vim#17190

5c3d1e3258

Co-authored-by: Girish Palya <girishji@gmail.com>
This commit is contained in:
zeertzjq
2025-04-23 07:22:46 +08:00
parent a9f810b203
commit 07d60e8f19
5 changed files with 11 additions and 4 deletions

View File

@@ -1061,7 +1061,7 @@ clearmatches([{win}]) *clearmatches()*
Parameters: ~
• {win} (`integer?`)
cmdcomplete_info([{what}]) *cmdcomplete_info()*
cmdcomplete_info() *cmdcomplete_info()*
Returns a |Dictionary| with information about cmdline
completion. See |cmdline-completion|.
The items are:

View File

@@ -1065,6 +1065,7 @@ int showmatches(expand_T *xp, bool wildmenu)
// Save cmdline before expansion
if (ccline->cmdbuff != NULL) {
xfree(cmdline_orig);
cmdline_orig = xstrnsave(ccline->cmdbuff, (size_t)ccline->cmdlen);
}

View File

@@ -1279,7 +1279,7 @@ M.funcs = {
name = 'cmdcomplete_info',
params = {},
returns = 'table<string,any>',
signature = 'cmdcomplete_info([{what}])',
signature = 'cmdcomplete_info()',
},
col = {
args = { 1, 2 },

View File

@@ -1302,8 +1302,8 @@ static int command_line_execute(VimState *state, int key)
}
// Trigger CmdlineLeavePre autocommand
if (ccline.cmdfirstc != NUL && (s->c == '\n' || s->c == '\r' || s->c == K_KENTER
|| s->c == ESC || s->c == Ctrl_C)) {
if (s->c == '\n' || s->c == '\r' || s->c == K_KENTER
|| s->c == ESC || s->c == Ctrl_C) {
trigger_cmd_autocmd(get_cmdline_type(), EVENT_CMDLINELEAVEPRE);
}

View File

@@ -1959,6 +1959,12 @@ func Test_Cmdline_Trigger()
call assert_equal('', g:log)
call feedkeys(":echo hello", "tx")
call assert_equal('CmdlineLeavePre', g:log)
let g:count = 0
autocmd CmdlineLeavePre * let g:count += 1
call feedkeys(":let c = input('? ')\<cr>B\<cr>", "tx")
call assert_equal(2, g:count)
unlet! g:count
unlet! g:log
bw!
endfunc