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:
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()