aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-11-01 20:22:48 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-11-02 08:06:37 +0800
commit39f85cdf6b40cbdd26256260d0d6d4e071b631a2 (patch)
tree4edecc7da99f4878bff893740b932a1b0c1d01a2 /src
parent20bd4d89977005845c070cde9df75496f948fa1e (diff)
downloadrneovim-39f85cdf6b40cbdd26256260d0d6d4e071b631a2.tar.gz
rneovim-39f85cdf6b40cbdd26256260d0d6d4e071b631a2.tar.bz2
rneovim-39f85cdf6b40cbdd26256260d0d6d4e071b631a2.zip
vim-patch:9.0.0824: crash when using win_move_separator() in other tab page
Problem: Crash when using win_move_separator() in other tab page. Solution: Check for valid window in current tab page. (closes vim/vim#11479, closes vim/vim#11427) https://github.com/vim/vim/commit/873f41a0187e81a22aa4622fbf938de72a54abba
Diffstat (limited to 'src')
-rw-r--r--src/nvim/eval/funcs.c4
-rw-r--r--src/nvim/testdir/test_mapping.vim14
-rw-r--r--src/nvim/testdir/test_window_cmd.vim10
3 files changed, 24 insertions, 4 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 79c93f1917..e676e2e656 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -9690,6 +9690,10 @@ static void f_win_move_separator(typval_T *argvars, typval_T *rettv, EvalFuncDat
if (wp == NULL || wp->w_floating) {
return;
}
+ if (!win_valid(wp)) {
+ emsg(_(e_cannot_resize_window_in_another_tab_page));
+ return;
+ }
int offset = (int)tv_get_number(&argvars[1]);
win_drag_vsep_line(wp, offset);
diff --git a/src/nvim/testdir/test_mapping.vim b/src/nvim/testdir/test_mapping.vim
index a286774d56..560883ba5d 100644
--- a/src/nvim/testdir/test_mapping.vim
+++ b/src/nvim/testdir/test_mapping.vim
@@ -1054,18 +1054,24 @@ func Test_mouse_drag_statusline()
set laststatus=2
set mouse=a
func ClickExpr()
- call Ntest_setmouse(&lines - 1, 1)
- return "\<LeftMouse>"
+ call Ntest_setmouse(&lines - 1, 1)
+ return "\<LeftMouse>"
endfunc
func DragExpr()
- call Ntest_setmouse(&lines - 2, 1)
- return "\<LeftDrag>"
+ call Ntest_setmouse(&lines - 2, 1)
+ return "\<LeftDrag>"
endfunc
nnoremap <expr> <F2> ClickExpr()
nnoremap <expr> <F3> DragExpr()
" this was causing a crash in win_drag_status_line()
call feedkeys("\<F2>:tabnew\<CR>\<F3>", 'tx')
+
+ nunmap <F2>
+ nunmap <F3>
+ delfunc ClickExpr
+ delfunc DragExpr
+ set laststatus& mouse&
endfunc
" Test for mapping <LeftDrag> in Insert mode
diff --git a/src/nvim/testdir/test_window_cmd.vim b/src/nvim/testdir/test_window_cmd.vim
index 902a3791d4..f38eaaf318 100644
--- a/src/nvim/testdir/test_window_cmd.vim
+++ b/src/nvim/testdir/test_window_cmd.vim
@@ -1393,17 +1393,20 @@ func Test_win_move_separator()
call assert_equal(w0, winwidth(0))
call assert_true(win_move_separator(0, -1))
call assert_equal(w0, winwidth(0))
+
" check that win_move_separator doesn't error with offsets beyond moving
" possibility
call assert_true(win_move_separator(id, 5000))
call assert_true(winwidth(id) > w)
call assert_true(win_move_separator(id, -5000))
call assert_true(winwidth(id) < w)
+
" check that win_move_separator returns false for an invalid window
wincmd =
let w = winwidth(0)
call assert_false(win_move_separator(-1, 1))
call assert_equal(w, winwidth(0))
+
" check that win_move_separator returns false for a floating window
let id = nvim_open_win(
\ 0, 0, #{relative: 'editor', row: 2, col: 2, width: 5, height: 3})
@@ -1411,6 +1414,13 @@ func Test_win_move_separator()
call assert_false(win_move_separator(id, 1))
call assert_equal(w, winwidth(id))
call nvim_win_close(id, 1)
+
+ " check that using another tabpage fails without crash
+ let id = win_getid()
+ tabnew
+ call assert_fails('call win_move_separator(id, -1)', 'E1308:')
+ tabclose
+
%bwipe!
endfunc