summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-01-20 21:44:31 +0100
committerBram Moolenaar <Bram@vim.org>2020-01-20 21:44:31 +0100
commita44b3eeafa57d4904a3de86b132008b93404f0fd (patch)
treeef84c42aa99e477e677eec09ec9d41086650736d
parented5adff1e6da412732514d82363005f85fe22e04 (diff)
patch 8.2.0137: crash when using win_execute() from a new tabv8.2.0137
Problem: Crash when using win_execute() from a new tab. Solution: Set the tp_*win pointers. (Ozaki Kiichi, closes #5512)
-rw-r--r--src/testdir/test_winbuf_close.vim14
-rw-r--r--src/version.c2
-rw-r--r--src/window.c5
3 files changed, 19 insertions, 2 deletions
diff --git a/src/testdir/test_winbuf_close.vim b/src/testdir/test_winbuf_close.vim
index ee43540fdd..7f5b80e8d3 100644
--- a/src/testdir/test_winbuf_close.vim
+++ b/src/testdir/test_winbuf_close.vim
@@ -160,7 +160,7 @@ func Test_winfixwidth_on_close()
endfunction
" Test that 'winfixheight' will be respected even there is non-leaf frame
-fun! Test_winfixheight_non_leaf_frame()
+func Test_winfixheight_non_leaf_frame()
vsplit
botright 11new
let l:wid = win_getid()
@@ -173,7 +173,7 @@ fun! Test_winfixheight_non_leaf_frame()
endf
" Test that 'winfixwidth' will be respected even there is non-leaf frame
-fun! Test_winfixwidth_non_leaf_frame()
+func Test_winfixwidth_non_leaf_frame()
split
topleft 11vnew
let l:wid = win_getid()
@@ -184,3 +184,13 @@ fun! Test_winfixwidth_non_leaf_frame()
call assert_equal(11, winwidth(l:wid))
%bwipe!
endf
+
+func Test_tabwin_close()
+ enew
+ let l:wid = win_getid()
+ tabedit
+ call win_execute(l:wid, 'close')
+ " Should not crash.
+ call assert_true(v:true)
+ %bwipe!
+endfunc
diff --git a/src/version.c b/src/version.c
index c23426be28..6a1702e852 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 137,
+/**/
136,
/**/
135,
diff --git a/src/window.c b/src/window.c
index 1096b60173..0c3c7f6905 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3616,6 +3616,9 @@ win_alloc_first(void)
return FAIL;
first_tabpage->tp_topframe = topframe;
curtab = first_tabpage;
+ curtab->tp_firstwin = firstwin;
+ curtab->tp_lastwin = lastwin;
+ curtab->tp_curwin = curwin;
return OK;
}
@@ -3854,6 +3857,8 @@ win_new_tabpage(int after)
newtp->tp_next = tp->tp_next;
tp->tp_next = newtp;
}
+ newtp->tp_firstwin = newtp->tp_lastwin = newtp->tp_curwin = curwin;
+
win_init_size();
firstwin->w_winrow = tabline_height();
win_comp_scroll(curwin);