diff options
author | bfredl <bjorn.linse@gmail.com> | 2024-01-23 10:18:21 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2024-01-23 11:39:37 +0100 |
commit | 79a558277b1b1520ee867fae2a914a2db1d67ec8 (patch) | |
tree | d85be41607d1e9eac4e2f68e583041bda2083ded | |
parent | d3fa8adea9ba4dcf96ec05aafff1a0cdb67a6d72 (diff) | |
download | rneovim-79a558277b1b1520ee867fae2a914a2db1d67ec8.tar.gz rneovim-79a558277b1b1520ee867fae2a914a2db1d67ec8.tar.bz2 rneovim-79a558277b1b1520ee867fae2a914a2db1d67ec8.zip |
fix(extmark): fix crash when stepping out from internal node
-rw-r--r-- | src/nvim/marktree.c | 2 | ||||
-rw-r--r-- | test/unit/marktree_spec.lua | 7 |
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) |