summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2019-04-28 05:03:56 +0000
committertb <>2019-04-28 05:03:56 +0000
commite11485d8aaf3818801c1c7586a97a34ef5230be9 (patch)
tree1240b3277f813c5cf09f47aa748f2cf861fb9953
parent15c975b54284a73a7a5d10902576c0734eb5ae58 (diff)
downloadopenbsd-e11485d8aaf3818801c1c7586a97a34ef5230be9.tar.gz
openbsd-e11485d8aaf3818801c1c7586a97a34ef5230be9.tar.bz2
openbsd-e11485d8aaf3818801c1c7586a97a34ef5230be9.zip
Avoid an undefined shift in ASN1_INTEGER_get().
Fixes oss-fuzz issue #13804 ok beck, jsing
-rw-r--r--src/lib/libcrypto/asn1/a_int.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/lib/libcrypto/asn1/a_int.c b/src/lib/libcrypto/asn1/a_int.c
index 1b2ebfb3a9..d14bd7959b 100644
--- a/src/lib/libcrypto/asn1/a_int.c
+++ b/src/lib/libcrypto/asn1/a_int.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: a_int.c,v 1.33 2019/03/26 09:15:07 jsing Exp $ */ 1/* $OpenBSD: a_int.c,v 1.34 2019/04/28 05:03:56 tb Exp $ */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -418,7 +418,7 @@ long
418ASN1_INTEGER_get(const ASN1_INTEGER *a) 418ASN1_INTEGER_get(const ASN1_INTEGER *a)
419{ 419{
420 int neg = 0, i; 420 int neg = 0, i;
421 long r = 0; 421 unsigned long r = 0;
422 422
423 if (a == NULL) 423 if (a == NULL)
424 return (0L); 424 return (0L);
@@ -442,9 +442,13 @@ ASN1_INTEGER_get(const ASN1_INTEGER *a)
442 r <<= 8; 442 r <<= 8;
443 r |= (unsigned char)a->data[i]; 443 r |= (unsigned char)a->data[i];
444 } 444 }
445
446 if (r > LONG_MAX)
447 return -1;
448
445 if (neg) 449 if (neg)
446 r = -r; 450 return -(long)r;
447 return (r); 451 return (long)r;
448} 452}
449 453
450ASN1_INTEGER * 454ASN1_INTEGER *