summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/x509v3/v3_alt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/x509v3/v3_alt.c')
-rw-r--r--src/lib/libcrypto/x509v3/v3_alt.c67
1 files changed, 48 insertions, 19 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_alt.c b/src/lib/libcrypto/x509v3/v3_alt.c
index 08063d191b..2dc07b4025 100644
--- a/src/lib/libcrypto/x509v3/v3_alt.c
+++ b/src/lib/libcrypto/x509v3/v3_alt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: v3_alt.c,v 1.28 2018/05/18 19:34:37 tb Exp $ */ 1/* $OpenBSD: v3_alt.c,v 1.29 2019/04/21 16:50:34 tb Exp $ */
2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3 * project. 3 * project.
4 */ 4 */
@@ -127,16 +127,27 @@ STACK_OF(CONF_VALUE) *
127i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, GENERAL_NAMES *gens, 127i2v_GENERAL_NAMES(X509V3_EXT_METHOD *method, GENERAL_NAMES *gens,
128 STACK_OF(CONF_VALUE) *ret) 128 STACK_OF(CONF_VALUE) *ret)
129{ 129{
130 int i;
131 GENERAL_NAME *gen; 130 GENERAL_NAME *gen;
131 int i;
132
133 if (ret == NULL) {
134 if ((ret = sk_CONF_VALUE_new_null()) == NULL)
135 return NULL;
136 }
132 137
133 for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) { 138 for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) {
134 gen = sk_GENERAL_NAME_value(gens, i); 139 if ((gen = sk_GENERAL_NAME_value(gens, i)) == NULL)
135 ret = i2v_GENERAL_NAME(method, gen, ret); 140 goto err;
141 if ((ret = i2v_GENERAL_NAME(method, gen, ret)) == NULL)
142 goto err;
136 } 143 }
137 if (!ret) 144
138 return sk_CONF_VALUE_new_null();
139 return ret; 145 return ret;
146
147 err:
148 sk_CONF_VALUE_pop_free(ret, X509V3_conf_free);
149
150 return NULL;
140} 151}
141 152
142STACK_OF(CONF_VALUE) * 153STACK_OF(CONF_VALUE) *
@@ -149,35 +160,43 @@ i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen,
149 160
150 switch (gen->type) { 161 switch (gen->type) {
151 case GEN_OTHERNAME: 162 case GEN_OTHERNAME:
152 X509V3_add_value("othername", "<unsupported>", &ret); 163 if (!X509V3_add_value("othername", "<unsupported>", &ret))
164 goto err;
153 break; 165 break;
154 166
155 case GEN_X400: 167 case GEN_X400:
156 X509V3_add_value("X400Name", "<unsupported>", &ret); 168 if (!X509V3_add_value("X400Name", "<unsupported>", &ret))
169 goto err;
157 break; 170 break;
158 171
159 case GEN_EDIPARTY: 172 case GEN_EDIPARTY:
160 X509V3_add_value("EdiPartyName", "<unsupported>", &ret); 173 if (!X509V3_add_value("EdiPartyName", "<unsupported>", &ret))
174 goto err;
161 break; 175 break;
162 176
163 case GEN_EMAIL: 177 case GEN_EMAIL:
164 X509V3_add_value_uchar("email", gen->d.ia5->data, &ret); 178 if (!X509V3_add_value_uchar("email", gen->d.ia5->data, &ret))
179 goto err;
165 break; 180 break;
166 181
167 case GEN_DNS: 182 case GEN_DNS:
168 X509V3_add_value_uchar("DNS", gen->d.ia5->data, &ret); 183 if (!X509V3_add_value_uchar("DNS", gen->d.ia5->data, &ret))
184 goto err;
169 break; 185 break;
170 186
171 case GEN_URI: 187 case GEN_URI:
172 X509V3_add_value_uchar("URI", gen->d.ia5->data, &ret); 188 if (!X509V3_add_value_uchar("URI", gen->d.ia5->data, &ret))
189 goto err;
173 break; 190 break;
174 191
175 case GEN_DIRNAME: 192 case GEN_DIRNAME:
176 X509_NAME_oneline(gen->d.dirn, oline, 256); 193 if (X509_NAME_oneline(gen->d.dirn, oline, 256) == NULL)
177 X509V3_add_value("DirName", oline, &ret); 194 goto err;
195 if (!X509V3_add_value("DirName", oline, &ret))
196 goto err;
178 break; 197 break;
179 198
180 case GEN_IPADD: 199 case GEN_IPADD: /* XXX */
181 p = gen->d.ip->data; 200 p = gen->d.ip->data;
182 if (gen->d.ip->length == 4) 201 if (gen->d.ip->length == 4)
183 (void) snprintf(oline, sizeof oline, 202 (void) snprintf(oline, sizeof oline,
@@ -193,18 +212,28 @@ i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, GENERAL_NAME *gen,
193 strlcat(oline, ":", sizeof(oline)); 212 strlcat(oline, ":", sizeof(oline));
194 } 213 }
195 } else { 214 } else {
196 X509V3_add_value("IP Address", "<invalid>", &ret); 215 if (!X509V3_add_value("IP Address", "<invalid>", &ret))
216 goto err;
197 break; 217 break;
198 } 218 }
199 X509V3_add_value("IP Address", oline, &ret); 219 if (!X509V3_add_value("IP Address", oline, &ret))
220 goto err;
200 break; 221 break;
201 222
202 case GEN_RID: 223 case GEN_RID:
203 i2t_ASN1_OBJECT(oline, 256, gen->d.rid); 224 if (!i2t_ASN1_OBJECT(oline, 256, gen->d.rid))
204 X509V3_add_value("Registered ID", oline, &ret); 225 goto err;
226 if (!X509V3_add_value("Registered ID", oline, &ret))
227 goto err;
205 break; 228 break;
206 } 229 }
230
207 return ret; 231 return ret;
232
233 err:
234 sk_CONF_VALUE_pop_free(ret, X509V3_conf_free);
235
236 return NULL;
208} 237}
209 238
210int 239int