summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2019-02-12 22:15:06 +0100
committerBram Moolenaar <Bram@vim.org>2019-02-12 22:15:06 +0100
commit57ee2b6e0b5b730d12ee9db00a8e2a577df9e374 (patch)
tree7a464fd4a90cd0a52e0329bb01aea5280b27ac7a
parent48773f1f83e666c49b9d88ea6a392d50215ca013 (diff)
downloadvim-git-57ee2b6e0b5b730d12ee9db00a8e2a577df9e374.tar.gz
patch 8.1.0901: index in getjumplist() may be wrongv8.1.0901
Problem: Index in getjumplist() may be wrong. (Epheien) Solution: Call cleanup_jumplist() earlier. (Yegappan Lakshmanan, closes #3941)
-rw-r--r--src/evalfunc.c4
-rw-r--r--src/testdir/test_jumplist.vim16
-rw-r--r--src/version.c2
3 files changed, 14 insertions, 8 deletions
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 6982ddfe1..6538b36d3 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -5271,6 +5271,8 @@ f_getjumplist(typval_T *argvars, typval_T *rettv)
if (wp == NULL)
return;
+ cleanup_jumplist(wp, TRUE);
+
l = list_alloc();
if (l == NULL)
return;
@@ -5279,8 +5281,6 @@ f_getjumplist(typval_T *argvars, typval_T *rettv)
return;
list_append_number(rettv->vval.v_list, (varnumber_T)wp->w_jumplistidx);
- cleanup_jumplist(wp, TRUE);
-
for (i = 0; i < wp->w_jumplistlen; ++i)
{
if (wp->w_jumplist[i].fmark.mark.lnum == 0)
diff --git a/src/testdir/test_jumplist.vim b/src/testdir/test_jumplist.vim
index 02dbd7619..be1af5e70 100644
--- a/src/testdir/test_jumplist.vim
+++ b/src/testdir/test_jumplist.vim
@@ -28,11 +28,13 @@ func Test_getjumplist()
normal G
normal gg
- call assert_equal([[
+ let expected = [[
\ {'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 50, 'bufnr': bnr, 'col': 0, 'coladd': 0},
- \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 4],
- \ getjumplist())
+ \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 3]
+ call assert_equal(expected, getjumplist())
+ " jumplist doesn't change in between calls
+ call assert_equal(expected, getjumplist())
" Traverse the jump list and verify the results
5
@@ -44,12 +46,14 @@ func Test_getjumplist()
call assert_equal(3, getjumplist()[1])
exe "normal \<C-O>"
normal 20%
- call assert_equal([[
+ let expected = [[
\ {'lnum': 1, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 50, 'bufnr': bnr, 'col': 0, 'coladd': 0},
\ {'lnum': 5, 'bufnr': bnr, 'col': 0, 'coladd': 0},
- \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 5],
- \ getjumplist())
+ \ {'lnum': 100, 'bufnr': bnr, 'col': 0, 'coladd': 0}], 4]
+ call assert_equal(expected, getjumplist())
+ " jumplist doesn't change in between calls
+ call assert_equal(expected, getjumplist())
let l = getjumplist()
call test_garbagecollect_now()
diff --git a/src/version.c b/src/version.c
index b02be7c1d..998f259ba 100644
--- a/src/version.c
+++ b/src/version.c
@@ -784,6 +784,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 901,
+/**/
900,
/**/
899,