From 2dd8e05f9fa9caef6fc04882dbdd27f387112266 Mon Sep 17 00:00:00 2001 From: ZyX Date: Thu, 24 Sep 2015 00:22:58 +0300 Subject: shada: Fix jump/change list merging code Errors happens under following conditions: 1. Jump/change list is full. 2. New jump/change list item should go between some of the old ones. --- src/nvim/shada.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/nvim/shada.c b/src/nvim/shada.c index 9e745431cb..cb5b5087f6 100644 --- a/src/nvim/shada.c +++ b/src/nvim/shada.c @@ -1213,10 +1213,10 @@ static inline bool marks_equal(const pos_T a, const pos_T b) if (i > 0) { \ if (jl_len == JUMPLISTSIZE) { \ free_func(jumps[0]); \ - if (i == JUMPLISTSIZE) { \ - i = JUMPLISTSIZE - 1; \ + i--; \ + if (i > 0) { \ + memmove(&jumps[0], &jumps[1], sizeof(jumps[1]) * (size_t) i); \ } \ - memmove(&jumps[0], &jumps[1], sizeof(jumps[1]) * (size_t) i); \ } else if (i != jl_len) { \ memmove(&jumps[i + 1], &jumps[i], \ sizeof(jumps[0]) * (size_t) (jl_len - i)); \ -- cgit