diff options
author | tb <> | 2022-08-10 12:06:28 +0000 |
---|---|---|
committer | tb <> | 2022-08-10 12:06:28 +0000 |
commit | 07a8d75b5ae234230be00fa0617d05fd80787b7a (patch) | |
tree | a5da66c1fef5732bcd9d3f096120fe1cfbe13e66 /src | |
parent | 59e7d7a474ef69602d2c336e05f4593856883a3b (diff) | |
download | openbsd-07a8d75b5ae234230be00fa0617d05fd80787b7a.tar.gz openbsd-07a8d75b5ae234230be00fa0617d05fd80787b7a.tar.bz2 openbsd-07a8d75b5ae234230be00fa0617d05fd80787b7a.zip |
Cast int64_t to uint64_t for negating
Avoid signed integer overflow by casting an int64_t to uint64_t before
negating. Same fix was applied in a_int.c -r1.44, but was forgotten to
be applied to a_enum.c.
ok jsing
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/asn1/a_enum.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lib/libcrypto/asn1/a_enum.c b/src/lib/libcrypto/asn1/a_enum.c index 3b6cd9f954..b0b851028a 100644 --- a/src/lib/libcrypto/asn1/a_enum.c +++ b/src/lib/libcrypto/asn1/a_enum.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: a_enum.c,v 1.25 2022/07/09 14:46:43 tb Exp $ */ | 1 | /* $OpenBSD: a_enum.c,v 1.26 2022/08/10 12:06:28 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 | * |
@@ -126,14 +126,18 @@ ASN1_ENUMERATED_get_int64(int64_t *out_val, const ASN1_ENUMERATED *aenum) | |||
126 | int | 126 | int |
127 | ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *aenum, int64_t val) | 127 | ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *aenum, int64_t val) |
128 | { | 128 | { |
129 | uint64_t uval; | ||
130 | |||
129 | asn1_aenum_clear(aenum); | 131 | asn1_aenum_clear(aenum); |
130 | 132 | ||
133 | uval = (uint64_t)val; | ||
134 | |||
131 | if (val < 0) { | 135 | if (val < 0) { |
132 | aenum->type = V_ASN1_NEG_ENUMERATED; | 136 | aenum->type = V_ASN1_NEG_ENUMERATED; |
133 | val = -val; | 137 | uval = -uval; |
134 | } | 138 | } |
135 | 139 | ||
136 | return asn1_aint_set_uint64((uint64_t)val, &aenum->data, &aenum->length); | 140 | return asn1_aint_set_uint64(uval, &aenum->data, &aenum->length); |
137 | } | 141 | } |
138 | 142 | ||
139 | long | 143 | long |