aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-06-25 08:15:45 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-06-27 08:26:10 +0800
commit3b6fb3fefd0bde9bd0700987c4db549a7f4916ec (patch)
tree05064f94e4d71948e72966d23244aa151681eaa7 /src
parent0ca2d11c1f473d9924c261c9dbd4e38730932bb4 (diff)
downloadrneovim-3b6fb3fefd0bde9bd0700987c4db549a7f4916ec.tar.gz
rneovim-3b6fb3fefd0bde9bd0700987c4db549a7f4916ec.tar.bz2
rneovim-3b6fb3fefd0bde9bd0700987c4db549a7f4916ec.zip
vim-patch:9.0.1664: divide by zero when scrolling with 'smoothscroll' set
Problem: Divide by zero when scrolling with 'smoothscroll' set. Solution: Avoid using a negative width. (closes vim/vim#12540, closes vim/vim#12528) https://github.com/vim/vim/commit/8154e642aa476e1a5d3de66c34e8289845b2b797 Co-authored-by: fullwaywang <fullwaywang@tencent.com>
Diffstat (limited to 'src')
-rw-r--r--src/nvim/move.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/nvim/move.c b/src/nvim/move.c
index f859294d65..cc02808e4c 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -1954,17 +1954,19 @@ void scroll_cursor_bot(int min_scroll, int set_topbot)
int top_plines = plines_win_nofill(curwin, curwin->w_topline, false);
int skip_lines = 0;
int width1 = curwin->w_width_inner - curwin_col_off();
- int width2 = width1 + curwin_col_off2();
- // similar formula is used in curs_columns()
- if (curwin->w_skipcol > width1) {
- skip_lines += (curwin->w_skipcol - width1) / width2 + 1;
- } else if (curwin->w_skipcol > 0) {
- skip_lines = 1;
- }
+ if (width1 > 0) {
+ int width2 = width1 + curwin_col_off2();
+ // similar formula is used in curs_columns()
+ if (curwin->w_skipcol > width1) {
+ skip_lines += (curwin->w_skipcol - width1) / width2 + 1;
+ } else if (curwin->w_skipcol > 0) {
+ skip_lines = 1;
+ }
- top_plines -= skip_lines;
- if (top_plines > curwin->w_height_inner) {
- scrolled += (top_plines - curwin->w_height_inner);
+ top_plines -= skip_lines;
+ if (top_plines > curwin->w_height_inner) {
+ scrolled += (top_plines - curwin->w_height_inner);
+ }
}
}
}