0
0
mirror of https://github.com/vim/vim.git synced 2025-07-04 23:07:33 -04:00

patch 8.2.1553: crash in edit test

Problem:    Crash in edit test.
Solution:   Avoid using invalid pointer.
This commit is contained in:
Bram Moolenaar 2020-08-31 21:15:02 +02:00
parent 64f37d3090
commit 2c93c685e3
2 changed files with 29 additions and 21 deletions

View File

@ -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;

View File

@ -754,6 +754,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1553,
/**/
1552,
/**/