mirror of
https://github.com/neovim/neovim.git
synced 2025-12-06 14:42:35 +00:00
fix(api): fix nvim_buf_set_text heap-use-after-free (#19644)
The line returned but ml_get_buf() may be freed by another call to ml_get_buf(), so it is necessary to make a copy.
This commit is contained in:
@@ -7,6 +7,7 @@ local meths = helpers.meths
|
||||
local funcs = helpers.funcs
|
||||
local request = helpers.request
|
||||
local exc_exec = helpers.exc_exec
|
||||
local exec_lua = helpers.exec_lua
|
||||
local feed_command = helpers.feed_command
|
||||
local insert = helpers.insert
|
||||
local NIL = helpers.NIL
|
||||
@@ -565,6 +566,17 @@ describe('api/buf', function()
|
||||
eq('start is higher than end', pcall_err(set_text, 1, 0, 0, 0, {}))
|
||||
eq('start is higher than end', pcall_err(set_text, 0, 1, 0, 0, {}))
|
||||
end)
|
||||
|
||||
it('no heap-use-after-free when called consecutively #19643', function()
|
||||
set_text(0, 0, 0, 0, {'one', '', '', 'two'})
|
||||
eq({'one', '', '', 'two'}, get_lines(0, 4, true))
|
||||
meths.win_set_cursor(0, {1, 0})
|
||||
exec_lua([[
|
||||
vim.api.nvim_buf_set_text(0, 0, 3, 1, 0, {''})
|
||||
vim.api.nvim_buf_set_text(0, 0, 3, 1, 0, {''})
|
||||
]])
|
||||
eq({'one', 'two'}, get_lines(0, 2, true))
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('nvim_buf_get_text', function()
|
||||
|
||||
Reference in New Issue
Block a user