# HG changeset patch # User Bram Moolenaar # Date 1598901317 -7200 # Node ID 3ea6b4a5369a25112797172000947418ce0065e8 # Parent 4c7310b17a0e4fdb40d01116073b210bf2caf28e patch 8.2.1553: crash in edit test Commit: https://github.com/vim/vim/commit/2c93c685e3334c50d9a748ad699df727a4501b08 Author: Bram Moolenaar 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. diff --git a/src/fold.c b/src/fold.c --- 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; diff --git a/src/version.c b/src/version.c --- 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,