summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-08-31 21:15:02 +0200
committerBram Moolenaar <Bram@vim.org>2020-08-31 21:15:02 +0200
commit2c93c685e3334c50d9a748ad699df727a4501b08 (patch)
treeb3974320863aa99531d8e52f1b55a90e3793d5f1
parent64f37d309025a65210dbc33823ec9ec5d547775f (diff)
downloadvim-git-2c93c685e3334c50d9a748ad699df727a4501b08.tar.gz
patch 8.2.1553: crash in edit testv8.2.1553
Problem: Crash in edit test. Solution: Avoid using invalid pointer.
-rw-r--r--src/fold.c48
-rw-r--r--src/version.c2
2 files changed, 29 insertions, 21 deletions
diff --git a/src/fold.c b/src/fold.c
index e4ae9cbc0..90fafea63 100644
--- 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
+ {
+ // This fold and new fold overlap: Insert here and move some
+ // folds inside the new fold.
+ break;
}
- 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;
}
+ 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;
diff --git a/src/version.c b/src/version.c
index b709939f6..8155ffccb 100644
--- 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,