From 841b225a53e89adbf4f8b877083b372f9adc0c07 Mon Sep 17 00:00:00 2001 From: miod <> Date: Sun, 21 Sep 2014 12:17:42 +0000 Subject: a_enum.c used to be a copy of a_int.c with s/INTEGER/ENUMERATED/g , but some changes an a_int.c did not get applied to a_enum.c; despite style changes, make sure BN_to_ASN1_ENUMERATED() correctly handles a zero value the same way BN_to_ASN1_INTEGER() does. ok bcook@ beck@ jsing@ --- src/lib/libcrypto/asn1/a_enum.c | 13 +++++++++---- src/lib/libssl/src/crypto/asn1/a_enum.c | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/lib/libcrypto/asn1/a_enum.c b/src/lib/libcrypto/asn1/a_enum.c index 35cb0eaff5..3c059266be 100644 --- a/src/lib/libcrypto/asn1/a_enum.c +++ b/src/lib/libcrypto/asn1/a_enum.c @@ -1,4 +1,4 @@ -/* $OpenBSD: a_enum.c,v 1.15 2014/07/11 08:44:47 jsing Exp $ */ +/* $OpenBSD: a_enum.c,v 1.16 2014/09/21 12:17:42 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -97,7 +97,7 @@ ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v) d >>= 8; } j = 0; - for (k = i - 1; k >=0; k--) + for (k = i - 1; k >= 0; k--) a->data[j++] = buf[k]; a->length = j; return (1); @@ -119,7 +119,7 @@ ASN1_ENUMERATED_get(ASN1_ENUMERATED *a) if (a->length > (int)sizeof(long)) { /* hmm... a bit ugly */ - return (0xffffffffL); + return -1; } if (a->data == NULL) return 0; @@ -161,8 +161,13 @@ BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai) } ret->data = new_data; } - ret->length = BN_bn2bin(bn, ret->data); + + /* Correct zero case */ + if (!ret->length) { + ret->data[0] = 0; + ret->length = 1; + } return (ret); err: diff --git a/src/lib/libssl/src/crypto/asn1/a_enum.c b/src/lib/libssl/src/crypto/asn1/a_enum.c index 35cb0eaff5..3c059266be 100644 --- a/src/lib/libssl/src/crypto/asn1/a_enum.c +++ b/src/lib/libssl/src/crypto/asn1/a_enum.c @@ -1,4 +1,4 @@ -/* $OpenBSD: a_enum.c,v 1.15 2014/07/11 08:44:47 jsing Exp $ */ +/* $OpenBSD: a_enum.c,v 1.16 2014/09/21 12:17:42 miod Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -97,7 +97,7 @@ ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v) d >>= 8; } j = 0; - for (k = i - 1; k >=0; k--) + for (k = i - 1; k >= 0; k--) a->data[j++] = buf[k]; a->length = j; return (1); @@ -119,7 +119,7 @@ ASN1_ENUMERATED_get(ASN1_ENUMERATED *a) if (a->length > (int)sizeof(long)) { /* hmm... a bit ugly */ - return (0xffffffffL); + return -1; } if (a->data == NULL) return 0; @@ -161,8 +161,13 @@ BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai) } ret->data = new_data; } - ret->length = BN_bn2bin(bn, ret->data); + + /* Correct zero case */ + if (!ret->length) { + ret->data[0] = 0; + ret->length = 1; + } return (ret); err: -- cgit v1.2.3-55-g6feb