fix(startup): set full_screen when in ex_mode

Problem Description: In ex_mode, the default_grid.chars are not allocated, and subsequently,
the w_grid.target in curwin is not allocated to default_grid in update_screen. This leads to
a null pointer crash when the completion function is executed in ex_mode.

Solution: Set full_screen when in ex_mode to ensure that default_grid is allocated.
This commit is contained in:
glepnir 2024-03-07 18:12:57 +08:00
parent 649dd00fe2
commit b21d960119
2 changed files with 13 additions and 1 deletions

View File

@ -363,7 +363,7 @@ int main(int argc, char **argv)
setbuf(stdout, NULL); // NOLINT(bugprone-unsafe-functions) setbuf(stdout, NULL); // NOLINT(bugprone-unsafe-functions)
full_screen = !silent_mode; full_screen = !silent_mode || exmode_active;
// Set the default values for the options that use Rows and Columns. // Set the default values for the options that use Rows and Columns.
win_init_size(); win_init_size();

View File

@ -73,6 +73,18 @@ describe('command-line option', function()
eq(#'100500\n', attrs.size) eq(#'100500\n', attrs.size)
end) end)
it('does not crash when run completion in ex mode', function()
fn.system({
nvim_prog_abs(),
'--clean',
'-e',
'-s',
'--cmd',
'exe "norm! i\\<C-X>\\<C-V>"',
})
eq(0, eval('v:shell_error'))
end)
it('does not crash after reading from stdin in non-headless mode', function() it('does not crash after reading from stdin in non-headless mode', function()
skip(is_os('win')) skip(is_os('win'))
local screen = Screen.new(40, 8) local screen = Screen.new(40, 8)