summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/f_enum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/f_enum.c')
-rw-r--r--src/lib/libcrypto/asn1/f_enum.c49
1 files changed, 16 insertions, 33 deletions
diff --git a/src/lib/libcrypto/asn1/f_enum.c b/src/lib/libcrypto/asn1/f_enum.c
index b6e66ab194..4ccfbddf2a 100644
--- a/src/lib/libcrypto/asn1/f_enum.c
+++ b/src/lib/libcrypto/asn1/f_enum.c
@@ -71,17 +71,12 @@ int i2a_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *a)
71 71
72 if (a == NULL) return(0); 72 if (a == NULL) return(0);
73 73
74 if (a->length == 0) 74 if (a->length == 0) {
75 {
76 if (BIO_write(bp,"00",2) != 2) goto err; 75 if (BIO_write(bp,"00",2) != 2) goto err;
77 n=2; 76 n=2;
78 } 77 } else {
79 else 78 for (i=0; i<a->length; i++) {
80 { 79 if ((i != 0) && (i%35 == 0)) {
81 for (i=0; i<a->length; i++)
82 {
83 if ((i != 0) && (i%35 == 0))
84 {
85 if (BIO_write(bp,"\\\n",2) != 2) goto err; 80 if (BIO_write(bp,"\\\n",2) != 2) goto err;
86 n+=2; 81 n+=2;
87 } 82 }
@@ -107,8 +102,7 @@ int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size)
107 bs->type=V_ASN1_ENUMERATED; 102 bs->type=V_ASN1_ENUMERATED;
108 103
109 bufsize=BIO_gets(bp,buf,size); 104 bufsize=BIO_gets(bp,buf,size);
110 for (;;) 105 for (;;) {
111 {
112 if (bufsize < 1) goto err_sl; 106 if (bufsize < 1) goto err_sl;
113 i=bufsize; 107 i=bufsize;
114 if (buf[i-1] == '\n') buf[--i]='\0'; 108 if (buf[i-1] == '\n') buf[--i]='\0';
@@ -117,12 +111,10 @@ int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size)
117 if (i == 0) goto err_sl; 111 if (i == 0) goto err_sl;
118 again=(buf[i-1] == '\\'); 112 again=(buf[i-1] == '\\');
119 113
120 for (j=0; j<i; j++) 114 for (j=0; j<i; j++) {
121 {
122 if (!( ((buf[j] >= '0') && (buf[j] <= '9')) || 115 if (!( ((buf[j] >= '0') && (buf[j] <= '9')) ||
123 ((buf[j] >= 'a') && (buf[j] <= 'f')) || 116 ((buf[j] >= 'a') && (buf[j] <= 'f')) ||
124 ((buf[j] >= 'A') && (buf[j] <= 'F')))) 117 ((buf[j] >= 'A') && (buf[j] <= 'F')))) {
125 {
126 i=j; 118 i=j;
127 break; 119 break;
128 } 120 }
@@ -133,33 +125,28 @@ int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size)
133 if (i < 2) goto err_sl; 125 if (i < 2) goto err_sl;
134 126
135 bufp=(unsigned char *)buf; 127 bufp=(unsigned char *)buf;
136 if (first) 128 if (first) {
137 {
138 first=0; 129 first=0;
139 if ((bufp[0] == '0') && (buf[1] == '0')) 130 if ((bufp[0] == '0') && (buf[1] == '0')) {
140 {
141 bufp+=2; 131 bufp+=2;
142 i-=2; 132 i-=2;
143 } 133 }
144 } 134 }
145 k=0; 135 k=0;
146 i-=again; 136 i-=again;
147 if (i%2 != 0) 137 if (i%2 != 0) {
148 {
149 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ASN1_R_ODD_NUMBER_OF_CHARS); 138 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ASN1_R_ODD_NUMBER_OF_CHARS);
150 goto err; 139 goto err;
151 } 140 }
152 i/=2; 141 i/=2;
153 if (num+i > slen) 142 if (num+i > slen) {
154 {
155 if (s == NULL) 143 if (s == NULL)
156 sp=(unsigned char *)malloc( 144 sp=(unsigned char *)malloc(
157 (unsigned int)num+i*2); 145 (unsigned int)num+i*2);
158 else 146 else
159 sp=(unsigned char *)realloc(s, 147 sp=(unsigned char *)realloc(s,
160 (unsigned int)num+i*2); 148 (unsigned int)num+i*2);
161 if (sp == NULL) 149 if (sp == NULL) {
162 {
163 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ERR_R_MALLOC_FAILURE); 150 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ERR_R_MALLOC_FAILURE);
164 if (s != NULL) free(s); 151 if (s != NULL) free(s);
165 goto err; 152 goto err;
@@ -167,10 +154,8 @@ int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size)
167 s=sp; 154 s=sp;
168 slen=num+i*2; 155 slen=num+i*2;
169 } 156 }
170 for (j=0; j<i; j++,k+=2) 157 for (j=0; j<i; j++,k+=2) {
171 { 158 for (n=0; n<2; n++) {
172 for (n=0; n<2; n++)
173 {
174 m=bufp[k+n]; 159 m=bufp[k+n];
175 if ((m >= '0') && (m <= '9')) 160 if ((m >= '0') && (m <= '9'))
176 m-='0'; 161 m-='0';
@@ -178,8 +163,7 @@ int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size)
178 m=m-'a'+10; 163 m=m-'a'+10;
179 else if ((m >= 'A') && (m <= 'F')) 164 else if ((m >= 'A') && (m <= 'F'))
180 m=m-'A'+10; 165 m=m-'A'+10;
181 else 166 else {
182 {
183 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ASN1_R_NON_HEX_CHARACTERS); 167 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ASN1_R_NON_HEX_CHARACTERS);
184 goto err; 168 goto err;
185 } 169 }
@@ -197,8 +181,7 @@ int a2i_ASN1_ENUMERATED(BIO *bp, ASN1_ENUMERATED *bs, char *buf, int size)
197 bs->data=s; 181 bs->data=s;
198 ret=1; 182 ret=1;
199err: 183err:
200 if (0) 184 if (0) {
201 {
202err_sl: 185err_sl:
203 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ASN1_R_SHORT_LINE); 186 ASN1err(ASN1_F_A2I_ASN1_ENUMERATED,ASN1_R_SHORT_LINE);
204 } 187 }