diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-08-11 21:37:35 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2019-08-14 13:11:20 +0200 |
commit | ba0aaf012a819d56a36d695fe02eaed820be81ff (patch) | |
tree | 4d3620d1f262254bedff6f1050398793f6602d33 /src/nvim/ui_compositor.c | |
parent | 5ad67af3c1884cd81a06986c4516c8a210bd7418 (diff) | |
download | rneovim-ba0aaf012a819d56a36d695fe02eaed820be81ff.tar.gz rneovim-ba0aaf012a819d56a36d695fe02eaed820be81ff.tar.bz2 rneovim-ba0aaf012a819d56a36d695fe02eaed820be81ff.zip |
compositor: handle invalid screen positions after resize gracefully
The screen resize logic needs to be refactored to be simpler and more
deterministic. Until then, we need to handle attempts to draw outside of the
screen size gracefully, just like the old vim code did.
fixes #9989
Diffstat (limited to 'src/nvim/ui_compositor.c')
-rw-r--r-- | src/nvim/ui_compositor.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/nvim/ui_compositor.c b/src/nvim/ui_compositor.c index 2cb3cf7ee7..9517b362af 100644 --- a/src/nvim/ui_compositor.c +++ b/src/nvim/ui_compositor.c @@ -480,8 +480,26 @@ static void ui_comp_raw_line(UI *ui, Integer grid, Integer row, if (curgrid != &default_grid) { flags = flags & ~kLineFlagWrap; } - assert(row < default_grid.Rows); - assert(clearcol <= default_grid.Columns); + + assert(endcol <= clearcol); + + // TODO(bfredl): this should not really be necessary. But on some condition + // when resizing nvim, a window will be attempted to be drawn on the older + // and possibly larger global screen size. + if (row >= default_grid.Rows) { + DLOG("compositor: invalid row %"PRId64" on grid %"PRId64, row, grid); + return; + } + if (clearcol > default_grid.Columns) { + DLOG("compositor: invalid last column %"PRId64" on grid %"PRId64, + clearcol, grid); + if (startcol >= default_grid.Columns) { + return; + } + clearcol = default_grid.Columns; + endcol = MIN(endcol, clearcol); + } + if (flags & kLineFlagInvalid || kv_size(layers) > curgrid->comp_index+1 || curgrid->blending) { |