diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/libcrypto/x509v3/v3_info.c | 46 |
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 | ||
| 239 | static AUTHORITY_INFO_ACCESS * | 247 | static AUTHORITY_INFO_ACCESS * |
