From de670f380914e71d16b3357b609bdd3d0d30d95b Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Wed, 27 Oct 2021 17:34:45 +0800 Subject: [PATCH] fix(float): fix potential heap corruption in win_redr_border --- src/nvim/screen.c | 4 ++- test/functional/ui/float_spec.lua | 44 +++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 16c81307ce..2cbd45e922 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -5655,7 +5655,9 @@ static void win_redr_border(win_T *wp) int ic = (i == 0 && !adj[3] && chars[6][0]) ? 6 : 5; grid_put_schar(grid, irow+adj[0], i+adj[3], chars[ic], attrs[ic]); } - grid_put_schar(grid, irow+adj[0], icol+adj[3], chars[4], attrs[4]); + if (adj[1]) { + grid_put_schar(grid, irow+adj[0], icol+adj[3], chars[4], attrs[4]); + } grid_puts_line_flush(false); } } diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index 6c2c4b398a..64b0cbcbfb 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -1194,6 +1194,50 @@ describe('float window', function() ]]} end + meths.win_set_config(win, {border={"", "_", "", "", "", "-", "", ""}}) + if multigrid then + command('redraw!') -- TODO: without a redraw this test fails, which should be fixed + screen:expect{grid=[[ + ## grid 1 + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [2:----------------------------------------]| + [3:----------------------------------------]| + ## grid 2 + ^ | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + ## grid 3 + | + ## grid 5 + {5:_________}| + {1: halloj! }| + {1: BORDAA }| + {5:---------}| + ]], float_pos={ + [5] = { { id = 1002 }, "NW", 1, 2, 5, true } + }, win_viewport={ + [2] = {win = {id = 1000}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 1}; + [5] = {win = {id = 1002}, topline = 0, botline = 2, curline = 0, curcol = 0, linecount = 2}; + }} + else + screen:expect{grid=[[ + ^ | + {0:~ }| + {0:~ }{5:_________}{0: }| + {0:~ }{1: halloj! }{0: }| + {0:~ }{1: BORDAA }{0: }| + {0:~ }{5:---------}{0: }| + | + ]]} + end + insert [[ neeed some dummy background text