patch 9.0.2113: Coverity warns for another overflow in shift_line()
Commit:
https://github.com/vim/vim/commit/22a97fc241361aa91bda84e5344d5b7c0cda3e81
Author: Christian Brabandt <
c...@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 <
c...@256bit.org>
Signed-off-by: Michael Henry <
v...@drmikehenry.com>
Signed-off-by: Ernie Rael <
err...@raelity.com>
diff --git a/src/ops.c b/src/ops.c
index ecd7fc217..9e8ea8616 100644
--- 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);
diff --git a/src/version.c b/src/version.c
index 249cd11d2..00b532075 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 2113,
/**/
2112,
/**/