diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-10-21 02:04:35 +0200 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-10-21 02:18:00 +0200 |
commit | 82b8382abe6c533fbdd01529cfc93a8d1c5231e2 (patch) | |
tree | 8ba892eed36830b4a2d716b25f93579d9537bf0f /src/nvim/cursor.c | |
parent | 6338199b76e661e85e4061122be99c57bf198cf8 (diff) | |
download | rneovim-82b8382abe6c533fbdd01529cfc93a8d1c5231e2.tar.gz rneovim-82b8382abe6c533fbdd01529cfc93a8d1c5231e2.tar.bz2 rneovim-82b8382abe6c533fbdd01529cfc93a8d1c5231e2.zip |
vim-patch:8.0.0962
closes #6726
Problem: Crash with virtualedit and joining lines.
(Joshua T Corbin, Neovim #6726)
Solution: When using a mark check that coladd is valid.
https://github.com/vim/vim/commit/9aa156912867c05e0a6480925afe11c590378f09
Diffstat (limited to 'src/nvim/cursor.c')
-rw-r--r-- | src/nvim/cursor.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/src/nvim/cursor.c b/src/nvim/cursor.c index 60002f3cea..e575143af0 100644 --- a/src/nvim/cursor.c +++ b/src/nvim/cursor.c @@ -375,17 +375,27 @@ void check_cursor_col_win(win_T *win) win->w_cursor.col = 0; } - /* If virtual editing is on, we can leave the cursor on the old position, - * only we must set it to virtual. But don't do it when at the end of the - * line. */ - if (oldcol == MAXCOL) + // If virtual editing is on, we can leave the cursor on the old position, + // only we must set it to virtual. But don't do it when at the end of the + // line. + if (oldcol == MAXCOL) { win->w_cursor.coladd = 0; - else if (ve_flags == VE_ALL) { - if (oldcoladd > win->w_cursor.col) + } else if (ve_flags == VE_ALL) { + if (oldcoladd > win->w_cursor.col) { win->w_cursor.coladd = oldcoladd - win->w_cursor.col; - else - /* avoid weird number when there is a miscalculation or overflow */ + 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; + } } } |