mirror of
https://github.com/vim/vim.git
synced 2025-09-13 23:04:24 -04:00
patch 8.2.1748: closing split window in other tab may cause a crash
Problem: Closing split window in other tab may cause a crash. Solution: Set tp_curwin properly. (Rob Pilling, closes #7018)
This commit is contained in:
parent
8f187fc630
commit
f3c51bbff1
@ -192,7 +192,23 @@ func Test_tabwin_close()
|
|||||||
call win_execute(l:wid, 'close')
|
call win_execute(l:wid, 'close')
|
||||||
" Should not crash.
|
" Should not crash.
|
||||||
call assert_true(v:true)
|
call assert_true(v:true)
|
||||||
%bwipe!
|
|
||||||
|
" This tests closing a window in another tab, while leaving the tab open
|
||||||
|
" i.e. two windows in another tab.
|
||||||
|
tabedit
|
||||||
|
let w:this_win = 42
|
||||||
|
new
|
||||||
|
let othertab_wid = win_getid()
|
||||||
|
tabprevious
|
||||||
|
call win_execute(othertab_wid, 'q')
|
||||||
|
" drawing the tabline helps check that the other tab's windows and buffers
|
||||||
|
" are still valid
|
||||||
|
redrawtabline
|
||||||
|
" but to be certain, ensure we can focus the other tab too
|
||||||
|
tabnext
|
||||||
|
call assert_equal(42, w:this_win)
|
||||||
|
|
||||||
|
bwipe!
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
" Test when closing a split window (above/below) restores space to the window
|
" Test when closing a split window (above/below) restores space to the window
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1748,
|
||||||
/**/
|
/**/
|
||||||
1747,
|
1747,
|
||||||
/**/
|
/**/
|
||||||
|
@ -2745,6 +2745,7 @@ win_free_mem(
|
|||||||
{
|
{
|
||||||
frame_T *frp;
|
frame_T *frp;
|
||||||
win_T *wp;
|
win_T *wp;
|
||||||
|
tabpage_T *win_tp = tp == NULL ? curtab : tp;
|
||||||
|
|
||||||
// Remove the window and its frame from the tree of frames.
|
// Remove the window and its frame from the tree of frames.
|
||||||
frp = win->w_frame;
|
frp = win->w_frame;
|
||||||
@ -2752,10 +2753,10 @@ win_free_mem(
|
|||||||
vim_free(frp);
|
vim_free(frp);
|
||||||
win_free(win, tp);
|
win_free(win, tp);
|
||||||
|
|
||||||
// When deleting the current window of another tab page select a new
|
// When deleting the current window in the tab, select a new current
|
||||||
// current window.
|
// window.
|
||||||
if (tp != NULL && win == tp->tp_curwin)
|
if (win == win_tp->tp_curwin)
|
||||||
tp->tp_curwin = wp;
|
win_tp->tp_curwin = wp;
|
||||||
|
|
||||||
return wp;
|
return wp;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user