changeset 30665:fe0a18141c3c v9.0.0667

patch 9.0.0667: ml_get error when 'splitkeep' is "screen" Commit: https://github.com/vim/vim/commit/346823d3e5668b99d2c2fd920e7f215e21ad3ea7 Author: Luuk van Baal <luukvbaal@gmail.com> Date: Wed Oct 5 18:26:42 2022 +0100 patch 9.0.0667: ml_get error when 'splitkeep' is "screen" 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)
author Bram Moolenaar <Bram@vim.org>
date Wed, 05 Oct 2022 19:30:02 +0200
parents 42e4fc20b3cc
children 5ba5a53cefbe
files src/testdir/test_window_cmd.vim src/version.c src/window.c
diffstat 3 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- 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&
--- 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,
--- 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)