neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 54225bdb021e64d09f98201bc0a610e2600b6473
parent dc466f9a63ede5e2bbddc33688c0c972abfe9a52
Author: bfredl <bjorn.linse@gmail.com>
Date:   Tue, 23 Jan 2024 09:16:04 +0100

fix(extmarks): crash with sign after many marks

fixes #27137

Diffstat:
Msrc/nvim/marktree.c | 4+++-
Mtest/functional/ui/decorations_spec.lua | 16++++++++++++++++
2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c @@ -1576,7 +1576,9 @@ bool marktree_itr_step_out_filter(MarkTree *b, MarkTreeIter *itr, MetaFilter met } itr->i = itr->x->n; - marktree_itr_next(b, itr); // no filter, just reuse the code for step to parent + + // no filter needed, just reuse the code path for step to parent + marktree_itr_next_skip(b, itr, true, false, NULL, NULL); } return itr->x; diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua @@ -4548,6 +4548,7 @@ describe('decorations: signs', function() [1] = {foreground = Screen.colors.Blue4, background = Screen.colors.Grey}; [2] = {foreground = Screen.colors.Blue1, bold = true}; [3] = {background = Screen.colors.Yellow1, foreground = Screen.colors.Blue1}; + [4] = {foreground = Screen.colors.Gray100, background = Screen.colors.Red}; } ns = api.nvim_create_namespace 'test' @@ -5021,6 +5022,21 @@ l5 | ]]} end) + + it('no crash with sign after many marks #27137', function() + screen:try_resize(20, 4) + insert('a') + for _ = 0, 104 do + api.nvim_buf_set_extmark(0, ns, 0, 0, {hl_group = 'Error', end_col = 1}) + end + api.nvim_buf_set_extmark(0, ns, 0, 0, {sign_text = 'S1'}) + + screen:expect{grid=[[ + S1{4:^a} | + {2:~ }|*2 + | + ]]} + end) end) describe('decorations: virt_text', function()