aboutsummaryrefslogtreecommitdiff
path: root/test/functional
diff options
context:
space:
mode:
authorLewis Russell <lewis6991@gmail.com>2023-04-27 17:30:22 +0100
committerGitHub <noreply@github.com>2023-04-27 17:30:22 +0100
commiteb4676c67f5dd54bcda473783315901a3444b40b (patch)
treeb57dd8342e3de756031664188ab542ead9134c38 /test/functional
parent9f29176033926b81553985deaba0ea162ca40215 (diff)
downloadrneovim-eb4676c67f5dd54bcda473783315901a3444b40b.tar.gz
rneovim-eb4676c67f5dd54bcda473783315901a3444b40b.tar.bz2
rneovim-eb4676c67f5dd54bcda473783315901a3444b40b.zip
fix: disallow removing extmarks in on_lines callbacks (#23219)
fix(extmarks): disallow removing extmarks in on_lines callbacks decor_redraw_start (which runs before decor_providers_invoke_lines) gets references for the extmarks on a specific line. If these extmarks are deleted in on_lines callbacks then this results in a heap-use-after-free error. Fixes #22801
Diffstat (limited to 'test/functional')
-rw-r--r--test/functional/ui/decorations_spec.lua19
1 files changed, 18 insertions, 1 deletions
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index 80e5b6230e..5792c9703d 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -122,7 +122,7 @@ describe('decorations providers', function()
]]}
check_trace {
{ "start", 5 };
- { "buf", 1 };
+ { "buf", 1, 5 };
{ "win", 1000, 1, 0, 8 };
{ "line", 1000, 1, 6 };
{ "end", 5 };
@@ -565,6 +565,23 @@ describe('decorations providers', function()
|
]])
end)
+
+ it('does not allow removing extmarks during on_line callbacks', function()
+ exec_lua([[
+ eok = true
+ ]])
+ setup_provider([[
+ local function on_do(kind, winid, bufnr, topline, botline_guess)
+ if kind == 'line' then
+ api.nvim_buf_set_extmark(bufnr, ns1, 1, -1, { sign_text = 'X' })
+ eok = pcall(api.nvim_buf_clear_namespace, bufnr, ns1, 0, -1)
+ end
+ end
+ ]])
+ exec_lua([[
+ assert(eok == false)
+ ]])
+ end)
end)
describe('extmark decorations', function()