0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.0.0962: crash with virtualedit and joining lines

Problem:    Crash with virtualedit and joining lines. (Joshua T Corbin, Neovim
            #6726)
Solution:   When using a mark check that coladd is valid.
This commit is contained in:
Bram Moolenaar
2017-08-19 15:05:32 +02:00
parent 98ebd2bbec
commit 9aa1569128
6 changed files with 52 additions and 0 deletions

View File

@@ -2274,6 +2274,7 @@ test_arglist \
test_utf8_comparisons \
test_viminfo \
test_vimscript \
test_virtualedit \
test_visual \
test_window_cmd \
test_window_id \

View File

@@ -605,7 +605,18 @@ check_cursor_col_win(win_T *win)
else if (ve_flags == VE_ALL)
{
if (oldcoladd > win->w_cursor.col)
{
win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
if (win->w_cursor.col < len && win->w_cursor.coladd > 0)
{
int cs, ce;
/* check that coladd is not more than the char width */
getvcol(win, &win->w_cursor, &cs, NULL, &ce);
if (win->w_cursor.coladd > ce - cs)
win->w_cursor.coladd = ce - cs;
}
}
else
/* avoid weird number when there is a miscalculation or overflow */
win->w_cursor.coladd = 0;

View File

@@ -1571,7 +1571,12 @@ do_pending_operator(cmdarg_T *cap, int old_col, int gui_yank)
oap->start = VIsual;
if (VIsual_mode == 'V')
{
oap->start.col = 0;
# ifdef FEAT_VIRTUALEDIT
oap->start.coladd = 0;
# endif
}
}
/*
@@ -7580,6 +7585,7 @@ nv_gomark(cmdarg_T *cap)
if (!virtual_active())
curwin->w_cursor.coladd = 0;
#endif
check_cursor_col();
#ifdef FEAT_FOLDING
if (cap->oap->op_type == OP_NOP
&& pos != NULL

View File

@@ -55,4 +55,5 @@ source test_taglist.vim
source test_timers.vim
source test_true_false.vim
source test_unlet.vim
source test_virtualedit.vim
source test_window_cmd.vim

View File

@@ -0,0 +1,31 @@
" Tests for 'virtualedit'.
func Test_yank_move_change()
split
call setline(1, [
\ "func foo() error {",
\ "\tif n, err := bar();",
\ "\terr != nil {",
\ "\t\treturn err",
\ "\t}",
\ "\tn = n * n",
\ ])
set virtualedit=all
set ts=4
function! MoveSelectionDown(count) abort
normal! m`
silent! exe "'<,'>move'>+".a:count
norm! ``
endfunction
xmap ]e :<C-U>call MoveSelectionDown(v:count1)<CR>
2
normal 2gg
normal J
normal jVj
normal ]e
normal ce
bwipe!
set virtualedit=
set ts=8
endfunc

View File

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