diff options
author | Bram Moolenaar <Bram@vim.org> | 2019-02-12 22:15:06 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2019-02-12 22:15:06 +0100 |
commit | 57ee2b6e0b5b730d12ee9db00a8e2a577df9e374 (patch) | |
tree | 7a464fd4a90cd0a52e0329bb01aea5280b27ac7a /src | |
parent | 48773f1f83e666c49b9d88ea6a392d50215ca013 (diff) | |
download | vim-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)
Diffstat (limited to 'src')
-rw-r--r-- | src/evalfunc.c | 4 | ||||
-rw-r--r-- | src/testdir/test_jumplist.vim | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |