1
0
forked from aniani/vim

patch 7.4.1939

Problem:    Memory access error when reading viminfo. (Dominique Pelle)
Solution:   Correct index in jumplist when at the end.
This commit is contained in:
Bram Moolenaar
2016-06-15 21:44:51 +02:00
parent 36f0f0686c
commit 28607ba2b8
3 changed files with 21 additions and 0 deletions

View File

@@ -1525,6 +1525,9 @@ handle_viminfo_mark(garray_T *values, int force)
if (idx < 0 && curwin->w_jumplistlen < JUMPLISTSIZE)
/* insert as the oldest entry */
idx = 0;
else if (idx == 0 && curwin->w_jumplistlen == JUMPLISTSIZE)
/* no space to insert as the oldest entry */
idx = -1;
}
else if (curwin->w_jumplistlen < JUMPLISTSIZE)
/* insert as oldest entry */
@@ -1537,6 +1540,7 @@ handle_viminfo_mark(garray_T *values, int force)
if (curwin->w_jumplistlen == JUMPLISTSIZE)
{
/* Drop the oldest entry. */
--idx;
vim_free(curwin->w_jumplist[0].fname);
for (i = 0; i < idx; ++i)
curwin->w_jumplist[i] = curwin->w_jumplist[i + 1];

View File

@@ -322,6 +322,7 @@ func Test_viminfo_jumplist()
clearjumps
rviminfo Xviminfo
let last_line = line('.')
exe "normal \<C-O>"
call assert_equal('time 30', getline('.'))
exe "normal \<C-O>"
@@ -336,6 +337,20 @@ func Test_viminfo_jumplist()
exe "normal \<C-O>"
call assert_equal('time 05', getline('.'))
" Test with jumplist full.
clearjumps
call setline(1, repeat(['match here'], 101))
call cursor(1, 1)
call test_settime(10)
for i in range(100)
exe "normal /here\r"
endfor
rviminfo Xviminfo
" must be newest mark that comes from viminfo.
exe "normal \<C-O>"
call assert_equal(last_line, line('.'))
bwipe!
call delete('Xviminfo')
endfunc

View File

@@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1939,
/**/
1938,
/**/