From 66e4784f5acef73ede2b1182b2e6d5a99f44f64a Mon Sep 17 00:00:00 2001 From: luukvbaal Date: Thu, 12 Jun 2025 08:51:29 +0200 Subject: [PATCH] fix(float): ensure relative window grid is allocated (#34459) Problem: Uninitialized grid for a "win" relative float when redrawing just after it has been opened. Solution: Ensure window grid is allocated or assigned the default grid. --- src/nvim/window.c | 1 + test/functional/ui/float_spec.lua | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/nvim/window.c b/src/nvim/window.c index e9235ca2fa..8acafa4e76 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -844,6 +844,7 @@ void ui_ext_win_position(win_T *wp, bool validate) } int row_off = 0; int col_off = 0; + win_grid_alloc(win); grid = grid_adjust(&win->w_grid, &row_off, &col_off); row += row_off; col += col_off; diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index 6dc7c87e85..83801e7679 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -909,6 +909,20 @@ describe('float window', function() eq({ 3, 3 }, { fn.winnr(), fn.win_id2win(win) }) end) + it('no crash for unallocated relative window grid', function() + local win = api.nvim_open_win(0, false, { relative = 'editor', row = 0, col = 0, height = 1, width = 1 }) + exec_lua(function() + vim.api.nvim_create_autocmd('CmdwinEnter', { + callback = function() + vim.api.nvim_win_set_config(win, { relative = 'win', win = 0, row = 0, col = 0 }) + vim.api.nvim__redraw({ flush = true }) + end, + }) + end) + feed('q:') + assert_alive() + end) + local function with_ext_multigrid(multigrid) local screen, attrs before_each(function()