summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2022-07-13 20:07:44 +0000
committerjsing <>2022-07-13 20:07:44 +0000
commit0098a49d7f3e76832151134749cae2b65b47ed1d (patch)
tree4b3a214761d37c35bd5bb3f924bb0329a9e48d7d /src
parente95ee47017ce917a814d017943491a0500dafae6 (diff)
downloadopenbsd-0098a49d7f3e76832151134749cae2b65b47ed1d.tar.gz
openbsd-0098a49d7f3e76832151134749cae2b65b47ed1d.tar.bz2
openbsd-0098a49d7f3e76832151134749cae2b65b47ed1d.zip
Cast int64_t to uint64_t before negating.
Avoid undefined behaviour/integer overflow by casting an int64_t to uint64_t before negating. Fixes oss-fuzz #49043 ok tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/asn1/a_int.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lib/libcrypto/asn1/a_int.c b/src/lib/libcrypto/asn1/a_int.c
index 1f1e587d39..d7790c787d 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.43 2022/07/09 14:46:42 tb Exp $ */ 1/* $OpenBSD: a_int.c,v 1.44 2022/07/13 20:07:44 jsing 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 *
@@ -282,14 +282,18 @@ ASN1_INTEGER_get_int64(int64_t *out_val, const ASN1_INTEGER *aint)
282int 282int
283ASN1_INTEGER_set_int64(ASN1_INTEGER *aint, int64_t val) 283ASN1_INTEGER_set_int64(ASN1_INTEGER *aint, int64_t val)
284{ 284{
285 uint64_t uval;
286
285 asn1_aint_clear(aint); 287 asn1_aint_clear(aint);
286 288
289 uval = (uint64_t)val;
290
287 if (val < 0) { 291 if (val < 0) {
288 aint->type = V_ASN1_NEG_INTEGER; 292 aint->type = V_ASN1_NEG_INTEGER;
289 val = -val; 293 uval = -uval;
290 } 294 }
291 295
292 return asn1_aint_set_uint64((uint64_t)val, &aint->data, &aint->length); 296 return asn1_aint_set_uint64(uval, &aint->data, &aint->length);
293} 297}
294 298
295long 299long