diff options
| author | tb <> | 2019-04-28 05:03:56 +0000 |
|---|---|---|
| committer | tb <> | 2019-04-28 05:03:56 +0000 |
| commit | 733d79c7c9c40d538016d5044ee64d0de934ab5a (patch) | |
| tree | 1240b3277f813c5cf09f47aa748f2cf861fb9953 /src/lib/libc | |
| parent | 62d48e8008432094a2d2c606b87246a30149daee (diff) | |
| download | openbsd-733d79c7c9c40d538016d5044ee64d0de934ab5a.tar.gz openbsd-733d79c7c9c40d538016d5044ee64d0de934ab5a.tar.bz2 openbsd-733d79c7c9c40d538016d5044ee64d0de934ab5a.zip | |
Avoid an undefined shift in ASN1_INTEGER_get().
Fixes oss-fuzz issue #13804
ok beck, jsing
Diffstat (limited to '')
| -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 * |
