# HG changeset patch # User Bram Moolenaar # Date 1562351407 -7200 # Node ID 6a7ba68d448ec5f8b888e436c6cbb3e1c8392f9f # Parent 25b99b296474ebd7846b35ae8a09fa2090bc4ce9 patch 8.1.1636: crash when popup has fitting scrollbar commit https://github.com/vim/vim/commit/437a746b4c1bd65cecc2e9095e911b58b13fce77 Author: Bram Moolenaar Date: Fri Jul 5 20:17:22 2019 +0200 patch 8.1.1636: crash when popup has fitting scrollbar Problem: Crash when popup has fitting scrollbar. (Trygve Aaberge) Solution: Don't divide by zero if the scrollbar just fits. (closes https://github.com/vim/vim/issues/4615) diff --git a/src/popupwin.c b/src/popupwin.c --- a/src/popupwin.c +++ b/src/popupwin.c @@ -2463,7 +2463,12 @@ update_popups(void (*win_update)(win_T * / linecount; if (sb_thumb_height == 0) sb_thumb_height = 1; - sb_thumb_top = (wp->w_topline - 1 + (linecount / wp->w_height) / 2) + if (linecount <= wp->w_height) + // it just fits, avoid divide by zero + sb_thumb_top = 0; + else + sb_thumb_top = (wp->w_topline - 1 + + (linecount / wp->w_height) / 2) * (wp->w_height - sb_thumb_height) / (linecount - wp->w_height); if (wp->w_scrollbar_highlight != NULL) 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 @@ -1565,6 +1565,18 @@ func Test_popup_scrollbar() call delete('XtestPopupScroll') endfunc +func Test_popup_fitting_scrollbar() + " this was causing a crash, divide by zero + let winid = popup_create([ + \ 'one', 'two', 'longer line that wraps', 'four', 'five'], { + \ 'scrollbar': 1, + \ 'maxwidth': 10, + \ 'maxheight': 5, + \ 'firstline': 2}) + redraw + call popup_clear() +endfunc + func Test_popup_settext() if !CanRunVimInTerminal() throw 'Skipped: cannot make screendumps' diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1636, +/**/ 1635, /**/ 1634,