changeset 22008:3ea6b4a5369a

patch 8.2.1553: crash in edit test Commit: https://github.com/vim/vim/commit/2c93c685e3334c50d9a748ad699df727a4501b08 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Aug 31 21:15:02 2020 +0200 patch 8.2.1553: crash in edit test Problem: Crash in edit test. Solution: Avoid using invalid pointer.
author Bram Moolenaar <Bram@vim.org>
date Mon, 31 Aug 2020 21:15:17 +0200
parents 4c7310b17a0e
children 24cef4317d92
files src/fold.c src/version.c
diffstat 2 files changed, 29 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/src/fold.c
+++ b/src/fold.c
@@ -608,35 +608,41 @@ foldCreate(linenr_T start, linenr_T end)
 
     // Find the place to insert the new fold.
     gap = &curwin->w_folds;
-    for (;;)
+    if (gap->ga_len == 0)
+	i = 0;
+    else
     {
-	if (!foldFind(gap, start_rel, &fp))
-	    break;
-	if (fp->fd_top + fp->fd_len > end_rel)
+	for (;;)
 	{
-	    // New fold is completely inside this fold: Go one level deeper.
-	    gap = &fp->fd_nested;
-	    start_rel -= fp->fd_top;
-	    end_rel -= fp->fd_top;
-	    if (use_level || fp->fd_flags == FD_LEVEL)
+	    if (!foldFind(gap, start_rel, &fp))
+		break;
+	    if (fp->fd_top + fp->fd_len > end_rel)
 	    {
-		use_level = TRUE;
-		if (level >= curwin->w_p_fdl)
+		// New fold is completely inside this fold: Go one level
+		// deeper.
+		gap = &fp->fd_nested;
+		start_rel -= fp->fd_top;
+		end_rel -= fp->fd_top;
+		if (use_level || fp->fd_flags == FD_LEVEL)
+		{
+		    use_level = TRUE;
+		    if (level >= curwin->w_p_fdl)
+			closed = TRUE;
+		}
+		else if (fp->fd_flags == FD_CLOSED)
 		    closed = TRUE;
+		++level;
 	    }
-	    else if (fp->fd_flags == FD_CLOSED)
-		closed = TRUE;
-	    ++level;
+	    else
+	    {
+		// This fold and new fold overlap: Insert here and move some
+		// folds inside the new fold.
+		break;
+	    }
 	}
-	else
-	{
-	    // This fold and new fold overlap: Insert here and move some folds
-	    // inside the new fold.
-	    break;
-	}
+	i = (int)(fp - (fold_T *)gap->ga_data);
     }
 
-    i = (int)(fp - (fold_T *)gap->ga_data);
     if (ga_grow(gap, 1) == OK)
     {
 	fp = (fold_T *)gap->ga_data + i;
--- a/src/version.c
+++ b/src/version.c
@@ -755,6 +755,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1553,
+/**/
     1552,
 /**/
     1551,