From a4b6705e877642d5d6dc8341b540b6cb68f7ec54 Mon Sep 17 00:00:00 2001 From: luukvbaal Date: Tue, 1 Apr 2025 14:02:24 +0200 Subject: [PATCH] fix(window): crash on negative window height with 'winbar' #33250 Problem: Negative window and grid height with 'winbar'. Solution: Clamp the height when subtracting the 'winbar' height. (cherry picked from commit 0e7479bb7637a21121b990cc960262a0d60196da) --- src/nvim/window.c | 2 +- test/functional/ui/winbar_spec.lua | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/nvim/window.c b/src/nvim/window.c index 916c193469..3022dccb1c 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -6634,7 +6634,7 @@ void win_set_inner_size(win_T *wp, bool valid_cursor) int prev_height = wp->w_height_inner; int height = wp->w_height_request; if (height == 0) { - height = wp->w_height - wp->w_winbar_height; + height = MAX(0, wp->w_height - wp->w_winbar_height); } if (height != prev_height) { diff --git a/test/functional/ui/winbar_spec.lua b/test/functional/ui/winbar_spec.lua index d1fd273dc1..09338eb7d2 100644 --- a/test/functional/ui/winbar_spec.lua +++ b/test/functional/ui/winbar_spec.lua @@ -540,6 +540,15 @@ describe('winbar', function() ]]) eq('Vim(set):E36: Not enough room', pcall_err(command, 'set winbar=test')) end) + + it('does not crash due to negative grid height #33176', function() + screen:try_resize(screen._width, 20) + command('botright split | belowright vsplit | 2wincmd w') + api.nvim_set_option_value('winfixheight', true, { scope = 'local', win = 0 }) + api.nvim_win_set_height(0, 8) + feed('q:') + n.assert_alive() + end) end) describe('local winbar with tabs', function()