diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-08-19 21:23:43 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2019-08-19 21:32:24 -0400 |
commit | ec9b57cb6e6679b7f08001677fc523a5d0a2a819 (patch) | |
tree | 8fccd674b239de43b8592a56a7b856f631392347 /src/nvim/fold.c | |
parent | 419c946f03824aff84aed0db27f3709bb697133f (diff) | |
download | rneovim-ec9b57cb6e6679b7f08001677fc523a5d0a2a819.tar.gz rneovim-ec9b57cb6e6679b7f08001677fc523a5d0a2a819.tar.bz2 rneovim-ec9b57cb6e6679b7f08001677fc523a5d0a2a819.zip |
vim-patch:8.1.1890: ml_get error when deleting fold marker
Problem: Ml_get error when deleting fold marker.
Solution: Check that the line number is not below the last line. Adjust the
fold when deleting the empty line. (Christian Brabandt,
closes vim/vim#4834)
https://github.com/vim/vim/commit/9a4a8c4d5993c6371486c895a515c2ad351e9aaa
Diffstat (limited to 'src/nvim/fold.c')
-rw-r--r-- | src/nvim/fold.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/nvim/fold.c b/src/nvim/fold.c index ad0bfe29e2..5ce953e626 100644 --- a/src/nvim/fold.c +++ b/src/nvim/fold.c @@ -1645,19 +1645,22 @@ deleteFoldMarkers( foldendmarkerlen); } -/* foldDelMarker() {{{2 */ -/* - * Delete marker "marker[markerlen]" at the end of line "lnum". - * Delete 'commentstring' if it matches. - * If the marker is not found, there is no error message. Could a missing - * close-marker. - */ +// foldDelMarker() {{{2 +// +// Delete marker "marker[markerlen]" at the end of line "lnum". +// Delete 'commentstring' if it matches. +// If the marker is not found, there is no error message. Could be a missing +// close-marker. static void foldDelMarker(linenr_T lnum, char_u *marker, size_t markerlen) { char_u *newline; char_u *cms = curbuf->b_p_cms; char_u *cms2; + // end marker may be missing and fold extends below the last line + if (lnum > curbuf->b_ml.ml_line_count) { + return; + } char_u *line = ml_get(lnum); for (char_u *p = line; *p != NUL; ++p) { if (STRNCMP(p, marker, markerlen) != 0) { @@ -2426,15 +2429,18 @@ static linenr_T foldUpdateIEMSRecurse( * lvl >= level: fold continues below "bot" */ - /* Current fold at least extends until lnum. */ + // Current fold at least extends until lnum. if (fp->fd_len < flp->lnum - fp->fd_top) { fp->fd_len = flp->lnum - fp->fd_top; fp->fd_small = kNone; fold_changed = true; + } else if (fp->fd_top + fp->fd_len > linecount) { + // running into the end of the buffer (deleted last line) + fp->fd_len = linecount - fp->fd_top + 1; } - /* Delete contained folds from the end of the last one found until where - * we stopped looking. */ + // Delete contained folds from the end of the last one found until where + // we stopped looking. foldRemove(&fp->fd_nested, startlnum2 - fp->fd_top, flp->lnum - 1 - fp->fd_top); |