diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-04-30 21:37:51 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-04-30 21:37:51 +0200 |
commit | b6c2e9a010ebd7db586081957e634903d4972fa1 (patch) | |
tree | 0060fb0ded71919735a9058173ef5aa5523a4845 /src/session.c | |
parent | 4934ed34c3e2090d1963c89c629cd3ce81d3ecd1 (diff) | |
download | vim-git-b6c2e9a010ebd7db586081957e634903d4972fa1.tar.gz |
patch 8.2.2820: session file may divide by zerov8.2.2820
Problem: Session file may divide by zero.
Solution: Avoid writing difide by zero. (closes #8162)
Diffstat (limited to 'src/session.c')
-rw-r--r-- | src/session.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/session.c b/src/session.c index 6d1ccb57e..8edf0dade 100644 --- a/src/session.c +++ b/src/session.c @@ -456,11 +456,19 @@ put_view( // Restore the cursor line in the file and relatively in the // 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 - wp->w_topline), - (long)wp->w_height / 2, (long)wp->w_height) < 0 - || put_eol(fd) == FAIL + (long)wp->w_height / 2, (long)wp->w_height) < 0) + return FAIL; + + if (put_eol(fd) == 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, "normal! zt") == FAIL |