Make sure max in fmtstr() doesn't overflow into negativity
authorRichard Levitte <levitte@openssl.org>
Mon, 30 May 2016 03:41:57 +0000 (05:41 +0200)
committerRichard Levitte <levitte@openssl.org>
Mon, 30 May 2016 03:41:57 +0000 (05:41 +0200)
Reviewed-by: Matt Caswell <matt@openssl.org>
crypto/bio/b_print.c

index 545c46981089c13774b8da088149316c909484ee..1b70bac71b1d6350dfe3d766026ac6e21a3b407c 100644 (file)
@@ -390,8 +390,16 @@ fmtstr(char **sbuffer,
     padlen = min - strln;
     if (min < 0 || padlen < 0)
         padlen = 0;
-    if (max >= 0)
-        max += padlen;      /* The maximum output including padding */
+    if (max >= 0) {
+        /*
+         * Calculate the maximum output including padding.
+         * Make sure max doesn't overflow into negativity
+         */
+        if (max < INT_MAX - padlen)
+            max += padlen;
+        else
+            max = INT_MAX;
+    }
     if (flags & DP_F_MINUS)
         padlen = -padlen;