aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-09-09 17:51:02 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-09-09 17:53:01 +0800
commitbc09fc04b8ef216bafa34792c3486a750e5c8bb3 (patch)
treebd4371553df03bdad3ba037e7bbcd785d6c92745
parentb7734c4ec84f0de14fcf86cfacefbed8a3ecf600 (diff)
downloadrneovim-bc09fc04b8ef216bafa34792c3486a750e5c8bb3.tar.gz
rneovim-bc09fc04b8ef216bafa34792c3486a750e5c8bb3.tar.bz2
rneovim-bc09fc04b8ef216bafa34792c3486a750e5c8bb3.zip
vim-patch:9.0.1877: missing test for patch 9.0.1873
Problem: missing test for patch 9.0.1873 Solution: add a test trying to exchange windows Add a test, making sure that switching windows is not allowed when textlock is active, e.g. when running `:s/<pat>/\=func()/` https://github.com/vim/vim/commit/18d2709aa12ffa3f6ae1a13059990558c5f8e406 Co-authored-by: Christian Brabandt <cb@256bit.org>
-rw-r--r--src/nvim/ex_cmds.c4
-rw-r--r--src/nvim/window.c4
-rw-r--r--test/old/testdir/test_substitute.vim14
3 files changed, 22 insertions, 0 deletions
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index a0618ce7d7..4f6b8f2c8f 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -3888,6 +3888,10 @@ static int do_sub(exarg_T *eap, const proftime_T timeout, const long cmdpreview_
nmatch = curbuf->b_ml.ml_line_count - sub_firstlnum + 1;
current_match.end.lnum = sub_firstlnum + (linenr_T)nmatch;
skip_match = true;
+ // safety check
+ if (nmatch < 0) {
+ goto skip;
+ }
}
// Save the line numbers for the preview buffer
diff --git a/src/nvim/window.c b/src/nvim/window.c
index e72c32700d..9d804ecae7 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -1884,6 +1884,10 @@ static void win_exchange(int Prenum)
beep_flush();
return;
}
+ if (text_or_buf_locked()) {
+ beep_flush();
+ return;
+ }
frame_T *frp;
diff --git a/test/old/testdir/test_substitute.vim b/test/old/testdir/test_substitute.vim
index a6640aac30..0d59697b3a 100644
--- a/test/old/testdir/test_substitute.vim
+++ b/test/old/testdir/test_substitute.vim
@@ -1425,4 +1425,18 @@ func Test_z_substitute_expr_leak()
delfunc SubExpr
endfunc
+func Test_substitute_expr_switch_win()
+ func R()
+ wincmd x
+ return 'XXXX'
+ endfunc
+ new Xfoobar
+ let bufnr = bufnr('%')
+ put ="abcdef"
+ silent! s/\%')/\=R()
+ call assert_fails(':%s/./\=R()/g', 'E565')
+ delfunc R
+ exe bufnr .. "bw!"
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab