diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-01-23 09:16:04 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2024-01-23 09:24:36 +0100 |
commit | 54225bdb021e64d09f98201bc0a610e2600b6473 (patch) | |
tree | 8051a68d4a4f42b04aab2dce6d316a4c421f403b | |
parent | dc466f9a63ede5e2bbddc33688c0c972abfe9a52 (diff) | |
download | rneovim-54225bdb021e64d09f98201bc0a610e2600b6473.tar.gz rneovim-54225bdb021e64d09f98201bc0a610e2600b6473.tar.bz2 rneovim-54225bdb021e64d09f98201bc0a610e2600b6473.zip |
fix(extmarks): crash with sign after many marks
fixes #27137
-rw-r--r-- | src/nvim/marktree.c | 4 | ||||
-rw-r--r-- | test/functional/ui/decorations_spec.lua | 16 |
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() |