fix(api): fix crash in command preview with % #35228

Problem: parse_cmdline() sets eap->cmdlinep to address of local parameter,
causing invalid memory access when expand_filename() tries to modify it.
This leads to crashes when typing '%' in user commands with preview=true
and complete=file.

Solution: Change parse_cmdline() signature to accept char **cmdline,
allowing cmdlinep to point to caller's variable for safe reallocation.
This commit is contained in:
glepnir
2025-08-13 04:43:56 +08:00
committed by GitHub
parent 3eab5bd38a
commit c7c3f9fc9c
4 changed files with 25 additions and 6 deletions

View File

@@ -615,6 +615,25 @@ describe("'inccommand' for user commands", function()
:Repro abc^ |
]])
end)
it('no crash with % + preview + file completion #28851', function()
exec_lua([[
local function callback() end
local function preview()
return 0
end
vim.api.nvim_create_user_command('TestCommand', callback, {
nargs = '?',
complete = 'file',
preview = preview,
})
vim.cmd.edit('Xtestscript')
]])
feed(':TestCommand %')
assert_alive()
end)
end)
describe("'inccommand' with multiple buffers", function()