aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/mark.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/nvim/mark.c b/src/nvim/mark.c
index ce44149ffa..6ac4b1de9c 100644
--- a/src/nvim/mark.c
+++ b/src/nvim/mark.c
@@ -1117,10 +1117,17 @@ static void cleanup_jumplist(void)
&& curwin->w_jumplist[i].fmark.mark.lnum
== curwin->w_jumplist[from].fmark.mark.lnum)
break;
- if (i >= curwin->w_jumplistlen) /* no duplicate */
- curwin->w_jumplist[to++] = curwin->w_jumplist[from];
- else
+ if (i >= curwin->w_jumplistlen) { // no duplicate
+ if (to != from) {
+ // Not using curwin->w_jumplist[to++] = curwin->w_jumplist[from] because
+ // this way valgrind complains about overlapping source and destination
+ // in memcpy() call. (clang-3.6.0, debug build with -DEXITFREE).
+ curwin->w_jumplist[to] = curwin->w_jumplist[from];
+ }
+ to++;
+ } else {
xfree(curwin->w_jumplist[from].fname);
+ }
}
if (curwin->w_jumplistidx == curwin->w_jumplistlen)
curwin->w_jumplistidx = to;