Mercurial > vim
changeset 33789:2175a980f3eb v9.0.2113
patch 9.0.2113: Coverity warns for another overflow in shift_line()
Commit: https://github.com/vim/vim/commit/22a97fc241361aa91bda84e5344d5b7c0cda3e81
Author: Christian Brabandt <cb@256bit.org>
Date: Sun Nov 19 10:45:24 2023 +0100
patch 9.0.2113: Coverity warns for another overflow in shift_line()
Problem: Coverity warns for another overflow in shift_line()
Solution: Test for INT_MAX after the if condition, cast integer values
to (long long) before multiplying.
Signed-off-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Michael Henry <vim@drmikehenry.com>
Signed-off-by: Ernie Rael <errael@raelity.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 19 Nov 2023 11:00:05 +0100 |
parents | 5ea4c560f01c |
children | ef49dc24dab1 |
files | src/ops.c src/version.c |
diffstat | 2 files changed, 8 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ops.c +++ b/src/ops.c @@ -249,25 +249,23 @@ shift_line( } else i += amount; - count = i * sw_val; + count = (long long)i * (long long)sw_val; } else // original vi indent { if (left) { - count -= sw_val * amount; + count -= (long long)sw_val * (long long)amount; if (count < 0) count = 0; } else - { - if ((long long)sw_val * (long long)amount > INT_MAX - count) - count = INT_MAX; - else - count += (long long)sw_val * (long long)amount; - } + count += (long long)sw_val * (long long)amount; } + if (count > INT_MAX) + count = INT_MAX; + // Set new indent if (State & VREPLACE_FLAG) change_indent(INDENT_SET, (int)count, FALSE, NUL, call_changed_bytes);