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);
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2113,
+/**/
     2112,
 /**/
     2111,