aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/marktree.c4
-rw-r--r--test/functional/ui/decorations_spec.lua16
2 files changed, 19 insertions, 1 deletions
diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c
index dbb4c5a9d3..9fcdf78be3 100644
--- 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
index f133b37e31..1b3d4afd5f 100644
--- 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()