patch 8.2.4108: going over the end of the w_lines array
Problem: Going over the end of the w_lines array.
Solution: Check not going over the end and limit to Rows. (issue #9540)
diff --git a/src/drawscreen.c b/src/drawscreen.c
index e0fb122..d03c429 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -1815,10 +1815,11 @@
// When topline didn't change, find first entry in w_lines[] that
// needs updating.
- // try to find wp->w_topline in wp->w_lines[].wl_lnum
+ // Try to find wp->w_topline in wp->w_lines[].wl_lnum. The check
+ // for "Rows" is in case "wl_size" is incorrect somehow.
j = -1;
row = 0;
- for (i = 0; i < wp->w_lines_valid; i++)
+ for (i = 0; i < wp->w_lines_valid && i < Rows; i++)
{
if (wp->w_lines[i].wl_valid
&& wp->w_lines[i].wl_lnum == wp->w_topline)
@@ -1848,6 +1849,8 @@
// ... but don't delete new filler lines.
row -= wp->w_topfill;
#endif
+ if (row > Rows) // just in case
+ row = Rows;
if (row > 0)
{
check_for_delay(FALSE);