# HG changeset patch # User Bram Moolenaar # Date 1613249105 -3600 # Node ID a0e02766e06de1fc45eeed040115db2238088c6a # Parent 6668c783ba6ff2822d0dafdfb6c38f6ecca7cafb patch 8.2.2510: internal error when popup with mask is zero height or width Commit: https://github.com/vim/vim/commit/10ccfb2a17e736ace054b19dc712544b4e961671 Author: Bram Moolenaar Date: Sat Feb 13 21:31:18 2021 +0100 patch 8.2.2510: internal error when popup with mask is zero height or width Problem: Internal error when popup with mask is zero height or width. Solution: Bail out if width or height is zero. (closes https://github.com/vim/vim/issues/7831) diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -3331,8 +3331,12 @@ popup_update_mask(win_T *wp, int width, char_u *cells; int row, col; - if (wp->w_popup_mask == NULL) + if (wp->w_popup_mask == NULL || width == 0 || height == 0) + { + vim_free(wp->w_popup_mask_cells); + wp->w_popup_mask_cells = NULL; return; + } if (wp->w_popup_mask_cells != NULL && wp->w_popup_mask_height == height && wp->w_popup_mask_width == width) diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim --- a/src/testdir/test_popupwin.vim +++ b/src/testdir/test_popupwin.vim @@ -825,6 +825,25 @@ func Test_popup_with_mask() " this was causing a crash call popup_create('test', #{mask: [[0, 0, 0, 0]]}) call popup_clear() + + " this was causing an internal error + enew + set nowrap + call repeat('x', &columns)->setline(1) + call prop_type_add('textprop', {}) + call prop_add(1, 1, #{length: &columns, type: 'textprop'}) + vsplit + let opts = popup_create('', #{textprop: 'textprop'}) + \ ->popup_getoptions() + \ ->extend(#{mask: [[1, 1, 1, 1]]}) + call popup_create('', opts) + redraw + + close! + bwipe! + call prop_type_delete('textprop') + call popup_clear() + set wrap& endfunc func Test_popup_select() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2510, +/**/ 2509, /**/ 2508,