aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2025-01-22 17:10:29 +0800
committerGitHub <noreply@github.com>2025-01-22 17:10:29 +0800
commitd46ebd2a74036a349606213fcd2a8b3530adebcf (patch)
treec7b087ab87823ec2092abd3caca8de1e9658b3f8
parenta66f6add29fd8b2ee352c6089ceca6ab4f522385 (diff)
downloadrneovim-d46ebd2a74036a349606213fcd2a8b3530adebcf.tar.gz
rneovim-d46ebd2a74036a349606213fcd2a8b3530adebcf.tar.bz2
rneovim-d46ebd2a74036a349606213fcd2a8b3530adebcf.zip
fix(startup): avoid crash with completion from -l script (#32160)
Related #27764
-rw-r--r--src/nvim/drawscreen.c7
-rw-r--r--src/nvim/main.c2
-rw-r--r--test/functional/core/main_spec.lua12
3 files changed, 14 insertions, 7 deletions
diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c
index b1ea38e280..7ebd4f2866 100644
--- a/src/nvim/drawscreen.c
+++ b/src/nvim/drawscreen.c
@@ -177,14 +177,11 @@ bool default_grid_alloc(void)
resizing = true;
// Allocation of the screen buffers is done only when the size changes and
- // when Rows and Columns have been set and we have started doing full
- // screen stuff.
+ // when Rows and Columns have been set.
if ((default_grid.chars != NULL
&& Rows == default_grid.rows
&& Columns == default_grid.cols)
- || Rows == 0
- || Columns == 0
- || (!full_screen && default_grid.chars == NULL)) {
+ || Rows == 0 || Columns == 0) {
resizing = false;
return false;
}
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 58d110e8b2..0bd4277d19 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -360,7 +360,7 @@ int main(int argc, char **argv)
setbuf(stdout, NULL); // NOLINT(bugprone-unsafe-functions)
- full_screen = !silent_mode || exmode_active;
+ full_screen = !silent_mode;
// Set the default values for the options that use Rows and Columns.
win_init_size();
diff --git a/test/functional/core/main_spec.lua b/test/functional/core/main_spec.lua
index 6add49ceae..65a7c556b8 100644
--- a/test/functional/core/main_spec.lua
+++ b/test/functional/core/main_spec.lua
@@ -67,12 +67,22 @@ describe('command-line option', function()
eq(#'100500\n', attrs.size)
end)
- it('does not crash when run completion in Ex mode', function()
+ it('does not crash when running completion in Ex mode', function()
local p =
n.spawn_wait('--clean', '-e', '-s', '--cmd', 'exe "norm! i\\<C-X>\\<C-V>"', '--cmd', 'qa!')
eq(0, p.status)
end)
+ it('does not crash when running completion from -l script', function()
+ local lua_fname = 'Xinscompl.lua'
+ write_file(lua_fname, [=[vim.cmd([[exe "norm! i\<C-X>\<C-V>"]])]=])
+ finally(function()
+ os.remove(lua_fname)
+ end)
+ local p = n.spawn_wait('--clean', '-l', lua_fname)
+ eq(0, p.status)
+ end)
+
it('does not crash after reading from stdin in non-headless mode', function()
skip(is_os('win'))
local screen = Screen.new(40, 8)