fix(ui): "resize -1" with cmdheight=0 #24758

Problem:
Crash from:

    set cmdheight=0 redrawdebug=invalid
    resize -1

Solution:
Do not invalidate first `p_ch` `msg_grid` rows in `update_screen` when
scrolling the screen down after displaying a message, because they may
be used later for drawing cmdline.
Fixes #22154
This commit is contained in:
nwounkn 2023-09-24 23:15:33 +05:00 committed by GitHub
parent 3bbb0aa399
commit 0592fd5e17
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 1 deletions

View File

@ -471,7 +471,7 @@ int update_screen(void)
// non-displayed part of msg_grid is considered invalid.
for (int i = 0; i < MIN(msg_scrollsize(), msg_grid.rows); i++) {
grid_clear_line(&msg_grid, msg_grid.line_offset[i],
msg_grid.cols, false);
msg_grid.cols, i < p_ch);
}
}
msg_grid.throttled = false;

View File

@ -1021,6 +1021,26 @@ describe('cmdheight=0', function()
screen:attach()
end)
it("with redrawdebug=invalid resize -1", function()
command("set redrawdebug=invalid cmdheight=0 noruler laststatus=0")
screen:expect{grid=[[
^ |
{1:~ }|
{1:~ }|
{1:~ }|
{1:~ }|
]]}
feed(":resize -1<CR>")
screen:expect{grid=[[
^ |
{1:~ }|
{1:~ }|
{1:~ }|
|
]]}
assert_alive()
end)
it("with cmdheight=1 noruler laststatus=2", function()
command("set cmdheight=1 noruler laststatus=2")
screen:expect{grid=[[