From 943773783384a5ff63f57769d37ddabf8156fe1e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 16 Feb 2022 20:30:52 +0000 Subject: 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(). --- src/change.c | 8 +++++--- src/version.c | 2 ++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/change.c b/src/change.c index 771f7675b6..d1ecb60bbf 100644 --- 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 index e1ecbac89a..b788e12e3e 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 4403, /**/ 4402, /**/ -- cgit v1.2.3