Skip to content
Permalink
Browse files Browse the repository at this point in the history
patch 8.2.5163: crash when deleting buffers in diff mode
Problem:    Crash when deleting buffers in diff mode.
Solution:   Recompute diffs later.  Skip window without a valid buffer.
  • Loading branch information
brammool committed Jun 26, 2022
1 parent 0971c7a commit cd38bb4
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/diff.c
Expand Up @@ -119,7 +119,12 @@ diff_buf_delete(buf_T *buf)
tp->tp_diffbuf[i] = NULL;
tp->tp_diff_invalid = TRUE;
if (tp == curtab)
diff_redraw(TRUE);
{
// don't redraw right away, more might change or buffer state
// is invalid right now
need_diff_redraw = TRUE;
redraw_later(VALID);
}
}
}
}
Expand Down Expand Up @@ -670,7 +675,8 @@ diff_redraw(

need_diff_redraw = FALSE;
FOR_ALL_WINDOWS(wp)
if (wp->w_p_diff)
// when closing windows or wiping buffers skip invalid window
if (wp->w_p_diff && buf_valid(wp->w_buffer))
{
redraw_win_later(wp, SOME_VALID);
if (wp != curwin)
Expand Down
12 changes: 12 additions & 0 deletions src/testdir/test_diffmode.vim
Expand Up @@ -1603,5 +1603,17 @@ func Test_diff_scroll()
call delete('Xright')
endfunc

" This was trying to update diffs for a buffer being closed
func Test_diff_only()
silent! lfile
set diff
lopen
norm o
silent! norm o

set nodiff
%bwipe!
endfunc


" vim: shiftwidth=2 sts=2 expandtab
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -735,6 +735,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
5163,
/**/
5162,
/**/
Expand Down

0 comments on commit cd38bb4

Please sign in to comment.