diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-08-31 21:15:02 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-08-31 21:15:02 +0200 |
commit | 2c93c685e3334c50d9a748ad699df727a4501b08 (patch) | |
tree | b3974320863aa99531d8e52f1b55a90e3793d5f1 | |
parent | 64f37d309025a65210dbc33823ec9ec5d547775f (diff) | |
download | vim-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.c | 48 | ||||
-rw-r--r-- | src/version.c | 2 |
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, |