# HG changeset patch # User Bram Moolenaar # Date 1645044303 -3600 # Node ID 1f37e508234350a93aab4413b452dc9fba92e35b # Parent 30b81ad0e33fbd45de7d36f043015d1c5995cf4e patch 8.2.4403: ml_get error with nested folds and deleting lines Commit: https://github.com/vim/vim/commit/943773783384a5ff63f57769d37ddabf8156fe1e Author: Bram Moolenaar Date: Wed Feb 16 20:30:52 2022 +0000 patch 8.2.4403: ml_get error with nested folds and deleting lines Problem: ml_get error with nested folds and deleting lines. Solution: Correct the last line number before calling hasFoldingWin(). diff --git a/src/change.c b/src/change.c --- a/src/change.c +++ b/src/change.c @@ -552,6 +552,8 @@ changed_common( { if (wp->w_buffer == curbuf) { + linenr_T last = lnume + xtra - 1; // last line after the change + // Mark this window to be redrawn later. if (wp->w_redr_type < VALID) wp->w_redr_type = VALID; @@ -561,7 +563,7 @@ changed_common( #ifdef FEAT_FOLDING // Update the folds for this window. Can't postpone this, because // a following operator might work on the whole fold: ">>dd". - foldUpdate(wp, lnum, lnume + xtra - 1); + foldUpdate(wp, lnum, last); // The change may cause lines above or below the change to become // included in a fold. Set lnum/lnume to the first/last line that @@ -571,8 +573,8 @@ changed_common( i = hasFoldingWin(wp, lnum, &lnum, NULL, FALSE, NULL); if (wp->w_cursor.lnum == lnum) wp->w_cline_folded = i; - i = hasFoldingWin(wp, lnume, NULL, &lnume, FALSE, NULL); - if (wp->w_cursor.lnum == lnume) + i = hasFoldingWin(wp, last, NULL, &last, FALSE, NULL); + if (wp->w_cursor.lnum == last) wp->w_cline_folded = i; // If the changed line is in a range of previously folded lines, diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4403, +/**/ 4402, /**/ 4401,