From: Kurt Roeckx Date: Fri, 11 Nov 2016 20:41:50 +0000 (+0100) Subject: Cast to an unsigned type before negating X-Git-Tag: OpenSSL_1_1_1-pre1~3084 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=e80f3b6af295133107ac709329eee16ccf9af61c;hp=866e505e0d663158b0fe63a7fb7455eebacc6470 Cast to an unsigned type before negating llvm's ubsan reported: runtime error: negation of -9223372036854775808 cannot be represented in type 'int64_t' (aka 'long'); cast to an unsigned type to negate this value to itself Found using libfuzzer Reviewed-by: Rich Salz GH: #1908 --- diff --git a/crypto/asn1/a_int.c b/crypto/asn1/a_int.c index 36248df92d..833322e89b 100644 --- a/crypto/asn1/a_int.c +++ b/crypto/asn1/a_int.c @@ -289,7 +289,7 @@ static int asn1_get_int64(int64_t *pr, const unsigned char *b, size_t blen, ASN1err(ASN1_F_ASN1_GET_INT64, ASN1_R_TOO_SMALL); return 0; } - *pr = -(int64_t)r; + *pr = -(uint64_t)r; } else { if (r > INT64_MAX) { ASN1err(ASN1_F_ASN1_GET_INT64, ASN1_R_TOO_LARGE);