aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2024-01-23 11:56:16 +0100
committerGitHub <noreply@github.com>2024-01-23 11:56:16 +0100
commitd9946006c96e65786dff8f8673912e01e2a1b714 (patch)
tree61202e156131476eb4153624e598303a2d0b5a48
parent26143d7a5c9027f83f797f4cc1ca5bafa418a03d (diff)
parent79a558277b1b1520ee867fae2a914a2db1d67ec8 (diff)
downloadrneovim-d9946006c96e65786dff8f8673912e01e2a1b714.tar.gz
rneovim-d9946006c96e65786dff8f8673912e01e2a1b714.tar.bz2
rneovim-d9946006c96e65786dff8f8673912e01e2a1b714.zip
Merge pull request #27147 from bfredl/crash2
fix(extmark): another "step out" case
-rw-r--r--src/nvim/marktree.c2
-rw-r--r--test/unit/marktree_spec.lua7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c
index 9fcdf78be3..9da7503524 100644
--- a/src/nvim/marktree.c
+++ b/src/nvim/marktree.c
@@ -1419,7 +1419,7 @@ bool marktree_itr_get_ext(MarkTree *b, MTPos p, MarkTreeIter *itr, bool last, bo
return marktree_itr_prev(b, itr);
} else if (itr->i >= itr->x->n) {
// no need for "meta_filter" here, this just goes up one step
- return marktree_itr_next(b, itr);
+ return marktree_itr_next_skip(b, itr, true, false, NULL, NULL);
}
return true;
}
diff --git a/test/unit/marktree_spec.lua b/test/unit/marktree_spec.lua
index 676190a440..b0a861727d 100644
--- a/test/unit/marktree_spec.lua
+++ b/test/unit/marktree_spec.lua
@@ -602,6 +602,13 @@ describe('marktree', function()
until not lib.marktree_itr_next_filter(tree, iter, 101, 0, filter)
eq(tablelength(seen), tablelength(shadow))
+ -- test skipping subtrees to find the filtered mark at line 50
+ for i = 4, 50 do
+ ok(lib.marktree_itr_get_filter(tree, i, 0, 60, 0, filter, iter))
+ local mark = lib.marktree_itr_current(iter)
+ eq({ 50, 50, 1 }, { mark.id, mark.pos.row, mark.pos.col })
+ end
+
-- delete
for id = 1, 10000, 2 do
lib.marktree_lookup_ns(tree, ns, id, false, iter)