From 581b2bcde0b49bd5e3931beea4c6a677bf549ed5 Mon Sep 17 00:00:00 2001 From: erw7 Date: Thu, 1 Apr 2021 20:46:12 +0900 Subject: [PATCH] screen: fix problem with p_ch When the screen is resized, p_ch is not re-set to the appropriate value. As a result, access to invalid addresses was occurring. --- src/nvim/screen.c | 4 ++++ test/functional/ui/cmdline_spec.lua | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 1e20b77c5c..384636f705 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -7507,6 +7507,10 @@ void screen_resize(int width, int height) Rows = height; Columns = width; check_shellsize(); + int max_p_ch = Rows - min_rows() + 1; + if (!ui_has(kUIMessages) && p_ch > max_p_ch) { + p_ch = max_p_ch ? max_p_ch : 1; + } height = Rows; width = Columns; p_lines = Rows; diff --git a/test/functional/ui/cmdline_spec.lua b/test/functional/ui/cmdline_spec.lua index 21c01b3458..29a76c7a07 100644 --- a/test/functional/ui/cmdline_spec.lua +++ b/test/functional/ui/cmdline_spec.lua @@ -3,6 +3,7 @@ local Screen = require('test.functional.ui.screen') local clear, feed = helpers.clear, helpers.feed local source = helpers.source local command = helpers.command +local assert_alive = helpers.assert_alive local function new_screen(opt) local screen = Screen.new(25, 5) @@ -842,3 +843,14 @@ describe('cmdline redraw', function() ]], unchanged=true} end) end) + +describe("cmdline height", function() + it("does not crash resized screen #14263", function() + clear() + local screen = Screen.new(25, 10) + screen:attach() + command('set cmdheight=9999') + screen:try_resize(25, 5) + assert_alive() + end) +end)