summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortb <>2022-08-10 12:06:28 +0000
committertb <>2022-08-10 12:06:28 +0000
commit07a8d75b5ae234230be00fa0617d05fd80787b7a (patch)
treea5da66c1fef5732bcd9d3f096120fe1cfbe13e66
parent59e7d7a474ef69602d2c336e05f4593856883a3b (diff)
downloadopenbsd-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
-rw-r--r--src/lib/libcrypto/asn1/a_enum.c10
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)
126int 126int
127ASN1_ENUMERATED_set_int64(ASN1_ENUMERATED *aenum, int64_t val) 127ASN1_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
139long 143long