patch 9.1.0672: marker folds may get corrupted on undo

Commit: 
https://github.com/vim/vim/commit/8d02e5cf961b06da5bc490ac5972bcbc252c4793
Author: Christian Brabandt <c...@256bit.org>
Date:   Sun Aug 11 20:12:41 2024 +0200

    patch 9.1.0672: marker folds may get corrupted on undo
    
    Problem:  marker folds may get corrupted on undo (Yousef Mohammed)
    Solution: when adjusting folds, make sure that line1 is the lower limit
              and line2 is the upper line limit. In particular, line2 should
              not be able to get smaller than line1.
    
    fixes: #15455
    closes: #15466
    
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/fold.c b/src/fold.c
index 2cd4dcd58..3353cc55f 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -1492,6 +1492,9 @@ deleteFoldRecurse(garray_T *gap)
 // foldMarkAdjust() {{{2
 /*
  * Update line numbers of folds for inserted/deleted lines.
+ *
+ * We are adjusting the folds in the range from line1 til line2,
+ * make sure that line2 does not get smaller than line1
  */
     void
 foldMarkAdjust(
@@ -1505,6 +1508,8 @@ foldMarkAdjust(
     // lines, set line2 so that only deleted lines have their folds removed.
     if (amount == MAXLNUM && line2 >= line1 && line2 - line1 >= -amount_after)
        line2 = line1 - amount_after - 1;
+    if (line2 < line1)
+       line2 = line1;
     // If appending a line in Insert mode, it should be included in the fold
     // just above the line.
     if ((State & MODE_INSERT) && amount == (linenr_T)1 && line2 == MAXLNUM)
diff --git a/src/testdir/test_fold.vim b/src/testdir/test_fold.vim
index 7fb004331..17487a561 100644
--- a/src/testdir/test_fold.vim
+++ b/src/testdir/test_fold.vim
@@ -1928,4 +1928,25 @@ func Test_cursor_down_fold_eob()
   bwipe!
 endfunc
 
+" issue: #15455
+func Test_cursor_fold_marker_undo()
+  new
+  call setline(1, ['{{{', '', 'This is a Line', '', 'This is a Line', '', 
'}}}'])
+  let &ul=&ul
+  setl foldmethod=marker
+  call cursor(2, 1)
+  norm! zo1vjdu
+  call assert_equal(1, foldlevel('.'))
+  bwipe!
+  new
+  call setline(1, ['', '{{{', '', 'This is a Line', '', 'This is a Line', '', 
'}}}'])
+  let &ul=&ul
+  setl foldmethod=marker
+  call cursor(3, 1)
+  norm! zo
+  norm! vjdu
+  call assert_equal(1, foldlevel('.'))
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index ef1ffb0ae..159357e21 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    672,
 /**/
     671,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1sdD5u-00CWwd-Lj%40256bit.org.

Raspunde prin e-mail lui