Fix arithmetic expression overflow
authorDrokov Pavel <drokov@rutoken.ru>
Fri, 12 Jan 2024 07:10:17 +0000 (02:10 -0500)
committerTomas Mraz <tomas@openssl.org>
Mon, 15 Jan 2024 09:49:25 +0000 (10:49 +0100)
If the value of a->length is large (>= 2^12), then an integer overflow will
occur for the signed type, which according to the C standard is UB.

CLA: trivial

Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23274)

crypto/objects/obj_dat.c

index ebde56247761c780cc54abbd6951ccf180c1d42b..30a63bbbd9b8ab54aadca82e12186cbad674b847 100644 (file)
@@ -128,7 +128,7 @@ static unsigned long added_obj_hash(const ADDED_OBJ *ca)
     a = ca->obj;
     switch (ca->type) {
     case ADDED_DATA:
-        ret = a->length << 20L;
+        ret = (unsigned long)a->length << 20UL;
         p = (unsigned char *)a->data;
         for (i = 0; i < a->length; i++)
             ret ^= p[i] << ((i * 3) % 24);