mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
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 #4615)
This commit is contained in:
@@ -2463,7 +2463,12 @@ update_popups(void (*win_update)(win_T *wp))
|
|||||||
/ linecount;
|
/ linecount;
|
||||||
if (sb_thumb_height == 0)
|
if (sb_thumb_height == 0)
|
||||||
sb_thumb_height = 1;
|
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)
|
* (wp->w_height - sb_thumb_height)
|
||||||
/ (linecount - wp->w_height);
|
/ (linecount - wp->w_height);
|
||||||
if (wp->w_scrollbar_highlight != NULL)
|
if (wp->w_scrollbar_highlight != NULL)
|
||||||
|
@@ -1565,6 +1565,18 @@ func Test_popup_scrollbar()
|
|||||||
call delete('XtestPopupScroll')
|
call delete('XtestPopupScroll')
|
||||||
endfunc
|
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()
|
func Test_popup_settext()
|
||||||
if !CanRunVimInTerminal()
|
if !CanRunVimInTerminal()
|
||||||
throw 'Skipped: cannot make screendumps'
|
throw 'Skipped: cannot make screendumps'
|
||||||
|
@@ -777,6 +777,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1636,
|
||||||
/**/
|
/**/
|
||||||
1635,
|
1635,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user