0
0
mirror of https://github.com/vim/vim.git synced 2025-10-04 05:25:06 -04:00

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 #4834)
This commit is contained in:
Bram Moolenaar
2019-08-19 22:48:30 +02:00
parent ea7ecfe2a0
commit 9a4a8c4d59
4 changed files with 32 additions and 5 deletions

View File

@@ -1813,7 +1813,7 @@ deleteFoldMarkers(
/*
* 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
* If the marker is not found, there is no error message. Could be a missing
* close-marker.
*/
static void
@@ -1826,6 +1826,9 @@ foldDelMarker(linenr_T lnum, char_u *marker, int markerlen)
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;
line = ml_get(lnum);
for (p = line; *p != NUL; ++p)
if (STRNCMP(p, marker, markerlen) == 0)
@@ -2733,16 +2736,19 @@ 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 = MAYBE;
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);