summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2022-10-05 18:26:42 +0100
committerBram Moolenaar <Bram@vim.org>2022-10-05 18:26:42 +0100
commit346823d3e5668b99d2c2fd920e7f215e21ad3ea7 (patch)
treeab5d401f50309df98b3975d1d71365e838a2208a
parent7beaf6a720ddc7e2989c8831872bfb98ec78a65d (diff)
downloadvim-git-346823d3e5668b99d2c2fd920e7f215e21ad3ea7.tar.gz
patch 9.0.0667: ml_get error when 'splitkeep' is "screen"v9.0.0667
Problem: ml_get error when 'splitkeep' is "screen". (Marius Gedminas) Solution: Check the botline is not too large. (Luuk van Baal, closes #11293, closes #11292)
-rw-r--r--src/testdir/test_window_cmd.vim7
-rw-r--r--src/version.c2
-rw-r--r--src/window.c3
3 files changed, 11 insertions, 1 deletions
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 771875757..61daa8d5c 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -1807,6 +1807,13 @@ function Test_splitkeep_misc()
let top = line('w0')
help | quit
call assert_equal(top, line('w0'))
+ " No error when resizing window in autocmd and buffer length changed
+ autocmd FileType qf exe "resize" line('$')
+ cexpr getline(1, '$')
+ copen
+ wincmd p
+ norm dd
+ cexpr getline(1, '$')
%bwipeout!
set splitbelow&
diff --git a/src/version.c b/src/version.c
index 925cb22fb..0d3e911e0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 667,
+/**/
666,
/**/
665,
diff --git a/src/window.c b/src/window.c
index 79ff5a426..1f3f9ad66 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6356,7 +6356,8 @@ win_fix_scroll(int resize)
if (wp->w_height != wp->w_prev_height)
{
// If window has moved update botline to keep the same screenlines.
- if (*p_spk == 's' && wp->w_winrow != wp->w_prev_winrow)
+ if (*p_spk == 's' && wp->w_winrow != wp->w_prev_winrow
+ && wp->w_botline - 1 <= wp->w_buffer->b_ml.ml_line_count)
{
lnum = wp->w_cursor.lnum;
diff = (wp->w_winrow - wp->w_prev_winrow)