From: Bram Moolenaar Date: Sat, 18 Mar 2017 21:35:30 +0000 (+0100) Subject: patch 8.0.0482: the setbufvar() function may mess up the window layout X-Git-Tag: v8.0.0482 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2c90d51123fba44a90e09aa4a4f2b7d972dadb94;p=vim patch 8.0.0482: the setbufvar() function may mess up the window layout Problem: The setbufvar() function may mess up the window layout. (Kay Z.) Solution: Do not check the window to be valid if it is NULL. --- diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index e2a4e8c7d..228e7ab43 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -725,3 +725,34 @@ func Test_balloon_show() call balloon_show('hi!') endif endfunc + +func Test_setbufvar_options() + " This tests that aucmd_prepbuf() and aucmd_restbuf() properly restore the + " window layout. + call assert_equal(1, winnr('$')) + split dummy_preview + resize 2 + set winfixheight winfixwidth + let prev_id = win_getid() + + wincmd j + let wh = winheight('.') + let dummy_buf = bufnr('dummy_buf1', v:true) + call setbufvar(dummy_buf, '&buftype', 'nofile') + execute 'belowright vertical split #' . dummy_buf + call assert_equal(wh, winheight('.')) + let dum1_id = win_getid() + + wincmd h + let wh = winheight('.') + let dummy_buf = bufnr('dummy_buf2', v:true) + call setbufvar(dummy_buf, '&buftype', 'nofile') + execute 'belowright vertical split #' . dummy_buf + call assert_equal(wh, winheight('.')) + + bwipe! + call win_gotoid(prev_id) + bwipe! + call win_gotoid(dum1_id) + bwipe! +endfunc diff --git a/src/version.c b/src/version.c index 007a1e673..828450d17 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 482, /**/ 481, /**/ diff --git a/src/window.c b/src/window.c index 43c9ed2c0..06f97de27 100644 --- a/src/window.c +++ b/src/window.c @@ -6563,7 +6563,7 @@ check_snapshot_rec(frame_T *sn, frame_T *fr) && check_snapshot_rec(sn->fr_next, fr->fr_next) == FAIL) || (sn->fr_child != NULL && check_snapshot_rec(sn->fr_child, fr->fr_child) == FAIL) - || !win_valid(sn->fr_win)) + || (sn->fr_win != NULL && !win_valid(sn->fr_win))) return FAIL; return OK; }