summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2019-04-22 17:18:30 +0000
committertb <>2019-04-22 17:18:30 +0000
commit4c449633b2bc47af1ff9a4e6d2468ab43560947c (patch)
tree6730741791bc15c8fb9b40a7eb81810595fe1fa6 /src
parenta2339aa009b2ac9b2d96975d578bb9f9fc757cea (diff)
downloadopenbsd-4c449633b2bc47af1ff9a4e6d2468ab43560947c.tar.gz
openbsd-4c449633b2bc47af1ff9a4e6d2468ab43560947c.tar.bz2
openbsd-4c449633b2bc47af1ff9a4e6d2468ab43560947c.zip
Add error checking to i2v_AUTHORITY_INFO_ACCESS(). While there, replace
an ugly strlen + malloc + strcat/strcpy dance by a simple asprintf(). ok jsing
Diffstat (limited to 'src')
-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 *