mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
coverity/331378: Fix inserting new decor provider
Since the providers are ordered by ns_id, inserting a new provider may require shifting existing providers around to maintain this ordering. When this happens, we need to allocate a new element at the end of the vector and then shift the larger elements to the right. Rather than iterating (incorrectly) with a loop and copying each item, use memmove to copy the entire block.
This commit is contained in:
@@ -66,6 +66,18 @@ describe('decorations providers', function()
|
||||
expect_events(expected, actual, "beam trace")
|
||||
end
|
||||
|
||||
it('does not OOM when inserting, rather than appending, to the decoration provider vector', function()
|
||||
-- Add a dummy decoration provider with a larger ns id than what setup_provider() creates.
|
||||
-- This forces get_decor_provider() to insert into the providers vector,
|
||||
-- rather than append, which used to spin in an infinite loop allocating
|
||||
-- memory until nvim crashed/was killed.
|
||||
setup_provider([[
|
||||
local ns2 = a.nvim_create_namespace "ns2"
|
||||
a.nvim_set_decoration_provider(ns2, {})
|
||||
]])
|
||||
helpers.assert_alive()
|
||||
end)
|
||||
|
||||
it('leave a trace', function()
|
||||
insert(mulholland)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user