]> granicus.if.org Git - vim/commitdiff
patch 8.2.1702: crash when using undo after deleting folded lines v8.2.1702
authorBram Moolenaar <Bram@vim.org>
Thu, 17 Sep 2020 17:36:04 +0000 (19:36 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 17 Sep 2020 17:36:04 +0000 (19:36 +0200)
Problem:    Crash when using undo after deleting folded lines.
Solution:   Check for NULL pointer. (closes #6968)

src/fold.c
src/testdir/test_fold.vim
src/version.c

index 5c55b0777b74fb91ffb0e976f21a8e597c526cf7..8a904f64c6a26ef6b9a0d909059bf82cde2f051e 100644 (file)
@@ -2422,8 +2422,8 @@ foldUpdateIEMSRecurse(
                                                              && flp->lvl > 0)
     {
        (void)foldFind(gap, startlnum - 1, &fp);
-       if (fp >= ((fold_T *)gap->ga_data) + gap->ga_len
-                                                  || fp->fd_top >= startlnum)
+       if (fp != NULL && (fp >= ((fold_T *)gap->ga_data) + gap->ga_len
+                                                  || fp->fd_top >= startlnum))
            fp = NULL;
     }
 
index 615fb44ce66c29dfd2566755f8e2678f89049f23..62244640bf443cfc3fe38a350ee92040cc975936 100644 (file)
@@ -816,4 +816,23 @@ func Test_fold_expr_error()
   close!
 endfunc
 
+func Test_undo_fold_deletion()
+  new
+  set fdm=marker
+  let lines =<< trim END
+      " {{{
+      " }}}1
+      " {{{
+  END
+  call setline(1, lines)
+  3d
+  g/"/d
+  undo
+  redo
+  eval getline(1, '$')->assert_equal([''])
+
+  set fdm&vim
+  bwipe!
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index e06b566181ffae879b669888fb762c67200759d7..9d87cdb7d049f9224c82c28b3c1d7d8855f379f7 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1702,
 /**/
     1701,
 /**/