summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/a_enum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/a_enum.c')
-rw-r--r--src/lib/libcrypto/asn1/a_enum.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/src/lib/libcrypto/asn1/a_enum.c b/src/lib/libcrypto/asn1/a_enum.c
index 77c7c2cd88..70cea0aad2 100644
--- a/src/lib/libcrypto/asn1/a_enum.c
+++ b/src/lib/libcrypto/asn1/a_enum.c
@@ -74,27 +74,23 @@ int ASN1_ENUMERATED_set(ASN1_ENUMERATED *a, long v)
74 long d; 74 long d;
75 75
76 a->type=V_ASN1_ENUMERATED; 76 a->type=V_ASN1_ENUMERATED;
77 if (a->length < (int)(sizeof(long)+1)) 77 if (a->length < (int)(sizeof(long)+1)) {
78 {
79 if (a->data != NULL) 78 if (a->data != NULL)
80 free(a->data); 79 free(a->data);
81 if ((a->data=(unsigned char *)malloc(sizeof(long)+1)) != NULL) 80 if ((a->data=(unsigned char *)malloc(sizeof(long)+1)) != NULL)
82 memset((char *)a->data,0,sizeof(long)+1); 81 memset((char *)a->data,0,sizeof(long)+1);
83 } 82 }
84 if (a->data == NULL) 83 if (a->data == NULL) {
85 {
86 ASN1err(ASN1_F_ASN1_ENUMERATED_SET,ERR_R_MALLOC_FAILURE); 84 ASN1err(ASN1_F_ASN1_ENUMERATED_SET,ERR_R_MALLOC_FAILURE);
87 return(0); 85 return(0);
88 } 86 }
89 d=v; 87 d=v;
90 if (d < 0) 88 if (d < 0) {
91 {
92 d= -d; 89 d= -d;
93 a->type=V_ASN1_NEG_ENUMERATED; 90 a->type=V_ASN1_NEG_ENUMERATED;
94 } 91 }
95 92
96 for (i=0; i<sizeof(long); i++) 93 for (i=0; i<sizeof(long); i++) {
97 {
98 if (d == 0) break; 94 if (d == 0) break;
99 buf[i]=(int)d&0xff; 95 buf[i]=(int)d&0xff;
100 d>>=8; 96 d>>=8;
@@ -118,16 +114,14 @@ long ASN1_ENUMERATED_get(ASN1_ENUMERATED *a)
118 else if (i != V_ASN1_ENUMERATED) 114 else if (i != V_ASN1_ENUMERATED)
119 return -1; 115 return -1;
120 116
121 if (a->length > (int)sizeof(long)) 117 if (a->length > (int)sizeof(long)) {
122 {
123 /* hmm... a bit ugly */ 118 /* hmm... a bit ugly */
124 return(0xffffffffL); 119 return(0xffffffffL);
125 } 120 }
126 if (a->data == NULL) 121 if (a->data == NULL)
127 return 0; 122 return 0;
128 123
129 for (i=0; i<a->length; i++) 124 for (i=0; i<a->length; i++) {
130 {
131 r<<=8; 125 r<<=8;
132 r|=(unsigned char)a->data[i]; 126 r|=(unsigned char)a->data[i];
133 } 127 }
@@ -144,8 +138,7 @@ ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai)
144 ret=M_ASN1_ENUMERATED_new(); 138 ret=M_ASN1_ENUMERATED_new();
145 else 139 else
146 ret=ai; 140 ret=ai;
147 if (ret == NULL) 141 if (ret == NULL) {
148 {
149 ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED,ERR_R_NESTED_ASN1_ERROR); 142 ASN1err(ASN1_F_BN_TO_ASN1_ENUMERATED,ERR_R_NESTED_ASN1_ERROR);
150 goto err; 143 goto err;
151 } 144 }
@@ -153,8 +146,7 @@ ASN1_ENUMERATED *BN_to_ASN1_ENUMERATED(BIGNUM *bn, ASN1_ENUMERATED *ai)
153 else ret->type=V_ASN1_ENUMERATED; 146 else ret->type=V_ASN1_ENUMERATED;
154 j=BN_num_bits(bn); 147 j=BN_num_bits(bn);
155 len=((j == 0)?0:((j/8)+1)); 148 len=((j == 0)?0:((j/8)+1));
156 if (ret->length < len+4) 149 if (ret->length < len+4) {
157 {
158 unsigned char *new_data=realloc(ret->data, len+4); 150 unsigned char *new_data=realloc(ret->data, len+4);
159 if (!new_data) 151 if (!new_data)
160 { 152 {