diff options
author | tb <> | 2019-04-28 05:03:56 +0000 |
---|---|---|
committer | tb <> | 2019-04-28 05:03:56 +0000 |
commit | e11485d8aaf3818801c1c7586a97a34ef5230be9 (patch) | |
tree | 1240b3277f813c5cf09f47aa748f2cf861fb9953 | |
parent | 15c975b54284a73a7a5d10902576c0734eb5ae58 (diff) | |
download | openbsd-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.c | 12 |
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 | |||
418 | ASN1_INTEGER_get(const ASN1_INTEGER *a) | 418 | ASN1_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 | ||
450 | ASN1_INTEGER * | 454 | ASN1_INTEGER * |