patch 8.2.2820: session file may divide by zero
Problem: Session file may divide by zero. Solution: Avoid writing difide by zero. (closes #8162)
This commit is contained in:
@ -456,11 +456,19 @@ put_view(
|
|||||||
|
|
||||||
// Restore the cursor line in the file and relatively in the
|
// Restore the cursor line in the file and relatively in the
|
||||||
// window. Don't use "G", it changes the jumplist.
|
// window. Don't use "G", it changes the jumplist.
|
||||||
if (fprintf(fd, "let s:l = %ld - ((%ld * winheight(0) + %ld) / %ld)",
|
if (wp->w_height <= 0)
|
||||||
|
{
|
||||||
|
if (fprintf(fd, "let s:l = %ld", (long)wp->w_cursor.lnum) < 0)
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
else if (fprintf(fd,
|
||||||
|
"let s:l = %ld - ((%ld * winheight(0) + %ld) / %ld)",
|
||||||
(long)wp->w_cursor.lnum,
|
(long)wp->w_cursor.lnum,
|
||||||
(long)(wp->w_cursor.lnum - wp->w_topline),
|
(long)(wp->w_cursor.lnum - wp->w_topline),
|
||||||
(long)wp->w_height / 2, (long)wp->w_height) < 0
|
(long)wp->w_height / 2, (long)wp->w_height) < 0)
|
||||||
|| put_eol(fd) == FAIL
|
return FAIL;
|
||||||
|
|
||||||
|
if (put_eol(fd) == FAIL
|
||||||
|| put_line(fd, "if s:l < 1 | let s:l = 1 | endif") == FAIL
|
|| put_line(fd, "if s:l < 1 | let s:l = 1 | endif") == FAIL
|
||||||
|| put_line(fd, "keepjumps exe s:l") == FAIL
|
|| put_line(fd, "keepjumps exe s:l") == FAIL
|
||||||
|| put_line(fd, "normal! zt") == FAIL
|
|| put_line(fd, "normal! zt") == FAIL
|
||||||
|
|||||||
@ -179,6 +179,20 @@ func Test_mksession_large_winheight()
|
|||||||
call delete('Xtest_mks_winheight.out')
|
call delete('Xtest_mks_winheight.out')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func Test_mksession_zero_winheight()
|
||||||
|
set winminheight=0
|
||||||
|
edit SomeFile
|
||||||
|
split
|
||||||
|
wincmd _
|
||||||
|
mksession! Xtest_mks_zero
|
||||||
|
set winminheight&
|
||||||
|
let text = readfile('Xtest_mks_zero')->join()
|
||||||
|
"call delete('Xtest_mks_zero')
|
||||||
|
close
|
||||||
|
" check there is no devide by zero
|
||||||
|
call assert_notmatch('/ 0[^0-9]', text)
|
||||||
|
endfunc
|
||||||
|
|
||||||
func Test_mksession_rtp()
|
func Test_mksession_rtp()
|
||||||
" TODO: fix problem with backslashes on Win32
|
" TODO: fix problem with backslashes on Win32
|
||||||
CheckNotMSWindows
|
CheckNotMSWindows
|
||||||
|
|||||||
@ -750,6 +750,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 */
|
||||||
|
/**/
|
||||||
|
2820,
|
||||||
/**/
|
/**/
|
||||||
2819,
|
2819,
|
||||||
/**/
|
/**/
|
||||||
|
|||||||
Reference in New Issue
Block a user