fix(lua): avoid vim._with() double-free with cmdmod (#31505)

This commit is contained in:
zeertzjq 2024-12-08 09:25:43 +08:00 committed by GitHub
parent 7008487b83
commit fe1e2eff06
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 0 deletions

View File

@ -619,6 +619,7 @@ static int nlua_with(lua_State *L)
int rets = 0;
cmdmod_T save_cmdmod = cmdmod;
CLEAR_FIELD(cmdmod);
cmdmod.cmod_flags = flags;
apply_cmdmod(&cmdmod);

View File

@ -1621,4 +1621,21 @@ describe('vim._with', function()
matches('Invalid buffer', get_error('{ buf = -1 }, function() end'))
matches('Invalid window', get_error('{ win = -1 }, function() end'))
end)
it('no double-free when called from :filter browse oldfiles #31501', function()
exec_lua([=[
vim.api.nvim_create_autocmd('BufEnter', {
callback = function()
vim._with({ lockmarks = true }, function() end)
end,
})
vim.cmd([[
let v:oldfiles = ['Xoldfile']
call nvim_input('1<CR>')
noswapfile filter /Xoldfile/ browse oldfiles
]])
]=])
n.assert_alive()
eq('Xoldfile', fn.bufname('%'))
end)
end)