aboutsummaryrefslogtreecommitdiff
path: root/test/functional/ui/decorations_spec.lua
diff options
context:
space:
mode:
authorJames McCoy <jamessan@jamessan.com>2021-05-05 21:26:51 -0400
committerJames McCoy <jamessan@jamessan.com>2021-05-06 18:56:56 -0400
commit833a6fcb6095254abae92a2309d7c3ce0e603bf3 (patch)
tree426f41debd34231fb5e86a0d26bc845edf366db5 /test/functional/ui/decorations_spec.lua
parent71107e12c7b68d8faf1bcc1a5794a55b21e146f3 (diff)
downloadrneovim-833a6fcb6095254abae92a2309d7c3ce0e603bf3.tar.gz
rneovim-833a6fcb6095254abae92a2309d7c3ce0e603bf3.tar.bz2
rneovim-833a6fcb6095254abae92a2309d7c3ce0e603bf3.zip
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.
Diffstat (limited to 'test/functional/ui/decorations_spec.lua')
-rw-r--r--test/functional/ui/decorations_spec.lua12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index 09638df6c5..98aafd8757 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -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)