From: Bram Moolenaar Date: Sat, 13 Feb 2021 20:31:18 +0000 (+0100) Subject: patch 8.2.2510: internal error when popup with mask is zero height or width X-Git-Tag: v8.2.2510 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=10ccfb2a17e736ace054b19dc712544b4e961671;p=vim 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 #7831) --- diff --git a/src/popupwin.c b/src/popupwin.c index b0895528e..1122f48e7 100644 --- a/src/popupwin.c +++ b/src/popupwin.c @@ -3331,8 +3331,12 @@ popup_update_mask(win_T *wp, int width, int height) 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 index 7f5895f96..44b18005f 100644 --- 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 index 5601c58aa..264df9bf1 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2510, /**/ 2509, /**/