aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/marktree.c
diff options
context:
space:
mode:
authorL Lllvvuu <git@llllvvuu.dev>2023-09-15 21:43:49 -0700
committerL Lllvvuu <git@llllvvuu.dev>2023-09-16 01:12:15 -0700
commit585549625d8aef073e874d7cace9ab9df0d71847 (patch)
tree68c45d9b626b2e7bee2e45f57fc4fcb330c71fcc /src/nvim/marktree.c
parentbe10d65bfafe056025ffffa2c1131712b9a493a5 (diff)
downloadrneovim-585549625d8aef073e874d7cace9ab9df0d71847.tar.gz
rneovim-585549625d8aef073e874d7cace9ab9df0d71847.tar.bz2
rneovim-585549625d8aef073e874d7cace9ab9df0d71847.zip
fix(marktree): off-by-one error in `marktree_move`
If you would insert element X at position j, then if you are moving that same element X from position i < j, you should move it to position j - 1, because you are losing an element. This error caused a gap to be left in the array, so that it looked like [x, null, y] instead of [x, y], where len = 2. This triggered #25147. Fixes: #25147
Diffstat (limited to 'src/nvim/marktree.c')
-rw-r--r--src/nvim/marktree.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c
index d8b8dbba29..e0bc9ae347 100644
--- a/src/nvim/marktree.c
+++ b/src/nvim/marktree.c
@@ -1191,8 +1191,8 @@ void marktree_move(MarkTree *b, MarkTreeIter *itr, int row, int col)
memmove(&x->key[new_i + 1], &x->key[new_i], sizeof(MTKey) * (size_t)(itr->i - new_i));
x->key[new_i] = key;
} else if (new_i > itr->i) {
- memmove(&x->key[itr->i], &x->key[itr->i + 1], sizeof(MTKey) * (size_t)(new_i - itr->i));
- x->key[new_i] = key;
+ memmove(&x->key[itr->i], &x->key[itr->i + 1], sizeof(MTKey) * (size_t)(new_i - itr->i - 1));
+ x->key[new_i - 1] = key;
}
return;
}