summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/x509v3/v3_info.c46
1 files changed, 27 insertions, 19 deletions
diff --git a/src/lib/libcrypto/x509v3/v3_info.c b/src/lib/libcrypto/x509v3/v3_info.c
index ebacbf5b0a..a895985510 100644
--- a/src/lib/libcrypto/x509v3/v3_info.c
+++ b/src/lib/libcrypto/x509v3/v3_info.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: v3_info.c,v 1.26 2018/05/19 10:37:02 tb Exp $ */ 1/* $OpenBSD: v3_info.c,v 1.27 2019/04/22 17:18:30 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 1999. 3 * project 1999.
4 */ 4 */
@@ -207,33 +207,41 @@ i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD *method,
207 AUTHORITY_INFO_ACCESS *ainfo, STACK_OF(CONF_VALUE) *ret) 207 AUTHORITY_INFO_ACCESS *ainfo, STACK_OF(CONF_VALUE) *ret)
208{ 208{
209 ACCESS_DESCRIPTION *desc; 209 ACCESS_DESCRIPTION *desc;
210 int i, nlen;
211 char objtmp[80], *ntmp;
212 CONF_VALUE *vtmp; 210 CONF_VALUE *vtmp;
211 STACK_OF(CONF_VALUE) *free_ret = NULL;
212 char objtmp[80], *ntmp;
213 int i;
214
215 if (ret == NULL) {
216 if ((free_ret = ret = sk_CONF_VALUE_new_null()) == NULL)
217 return NULL;
218 }
213 219
214 for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) { 220 for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) {
215 desc = sk_ACCESS_DESCRIPTION_value(ainfo, i); 221 if ((desc = sk_ACCESS_DESCRIPTION_value(ainfo, i)) == NULL)
216 ret = i2v_GENERAL_NAME(method, desc->location, ret); 222 goto err;
217 if (!ret) 223 if ((ret = i2v_GENERAL_NAME(method, desc->location,
218 break; 224 ret)) == NULL)
219 vtmp = sk_CONF_VALUE_value(ret, i); 225 goto err;
220 i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method); 226 if ((vtmp = sk_CONF_VALUE_value(ret, i)) == NULL)
221 nlen = strlen(objtmp) + strlen(vtmp->name) + 5; 227 goto err;
222 ntmp = malloc(nlen); 228 if (!i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method))
223 if (!ntmp) { 229 goto err;
230 if (asprintf(&ntmp, "%s - %s", objtmp, vtmp->name) == -1) {
231 ntmp = NULL;
224 X509V3error(ERR_R_MALLOC_FAILURE); 232 X509V3error(ERR_R_MALLOC_FAILURE);
225 return NULL; 233 goto err;
226 } 234 }
227 strlcpy(ntmp, objtmp, nlen);
228 strlcat(ntmp, " - ", nlen);
229 strlcat(ntmp, vtmp->name, nlen);
230 free(vtmp->name); 235 free(vtmp->name);
231 vtmp->name = ntmp; 236 vtmp->name = ntmp;
232
233 } 237 }
234 if (!ret) 238
235 return sk_CONF_VALUE_new_null();
236 return ret; 239 return ret;
240
241 err:
242 sk_CONF_VALUE_pop_free(free_ret, X509V3_conf_free);
243
244 return NULL;
237} 245}
238 246
239static AUTHORITY_INFO_ACCESS * 247static AUTHORITY_INFO_ACCESS *