Fix some error path logic in i2v_AUTHORITY_INFO_ACCESS and i2v_GENERAL_NAME
(Imported from upstream's 16d78fbc2a6804453824752110737ab7b7f04ea8.) Change-Id: I6b5ae3b9bf457d6555fa1583bcd7c168b5fc8310 Reviewed-on: https://boringssl-review.googlesource.com/15836 Reviewed-by: Steven Valdez <svaldez@google.com> Commit-Queue: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
This commit is contained in:
parent
c0ae51dfe4
commit
2d933590cf
@ -121,32 +121,39 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
|
||||
int i;
|
||||
switch (gen->type) {
|
||||
case GEN_OTHERNAME:
|
||||
X509V3_add_value("othername", "<unsupported>", &ret);
|
||||
if (!X509V3_add_value("othername", "<unsupported>", &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_X400:
|
||||
X509V3_add_value("X400Name", "<unsupported>", &ret);
|
||||
if (!X509V3_add_value("X400Name", "<unsupported>", &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_EDIPARTY:
|
||||
X509V3_add_value("EdiPartyName", "<unsupported>", &ret);
|
||||
if (!X509V3_add_value("EdiPartyName", "<unsupported>", &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_EMAIL:
|
||||
X509V3_add_value_uchar("email", gen->d.ia5->data, &ret);
|
||||
if (!X509V3_add_value_uchar("email", gen->d.ia5->data, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_DNS:
|
||||
X509V3_add_value_uchar("DNS", gen->d.ia5->data, &ret);
|
||||
if (!X509V3_add_value_uchar("DNS", gen->d.ia5->data, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_URI:
|
||||
X509V3_add_value_uchar("URI", gen->d.ia5->data, &ret);
|
||||
if (!X509V3_add_value_uchar("URI", gen->d.ia5->data, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_DIRNAME:
|
||||
X509_NAME_oneline(gen->d.dirn, oline, 256);
|
||||
X509V3_add_value("DirName", oline, &ret);
|
||||
if (X509_NAME_oneline(gen->d.dirn, oline, 256) == NULL
|
||||
|| !X509V3_add_value("DirName", oline, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_IPADD:
|
||||
@ -164,15 +171,18 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
|
||||
strcat(oline, ":");
|
||||
}
|
||||
} else {
|
||||
X509V3_add_value("IP Address", "<invalid>", &ret);
|
||||
if (!X509V3_add_value("IP Address", "<invalid>", &ret))
|
||||
return NULL;
|
||||
break;
|
||||
}
|
||||
X509V3_add_value("IP Address", oline, &ret);
|
||||
if (!X509V3_add_value("IP Address", oline, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
|
||||
case GEN_RID:
|
||||
i2t_ASN1_OBJECT(oline, 256, gen->d.rid);
|
||||
X509V3_add_value("Registered ID", oline, &ret);
|
||||
if (!X509V3_add_value("Registered ID", oline, &ret))
|
||||
return NULL;
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
|
@ -112,29 +112,31 @@ ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS)
|
||||
|
||||
IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
|
||||
|
||||
static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
|
||||
*method, AUTHORITY_INFO_ACCESS
|
||||
*ainfo, STACK_OF(CONF_VALUE)
|
||||
*ret)
|
||||
static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(
|
||||
X509V3_EXT_METHOD *method, AUTHORITY_INFO_ACCESS *ainfo,
|
||||
STACK_OF(CONF_VALUE) *ret)
|
||||
{
|
||||
ACCESS_DESCRIPTION *desc;
|
||||
size_t i;
|
||||
int nlen;
|
||||
char objtmp[80], *ntmp;
|
||||
CONF_VALUE *vtmp;
|
||||
STACK_OF(CONF_VALUE) *tret = ret;
|
||||
|
||||
for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) {
|
||||
STACK_OF(CONF_VALUE) *tmp;
|
||||
|
||||
desc = sk_ACCESS_DESCRIPTION_value(ainfo, i);
|
||||
ret = i2v_GENERAL_NAME(method, desc->location, ret);
|
||||
if (!ret)
|
||||
break;
|
||||
vtmp = sk_CONF_VALUE_value(ret, i);
|
||||
tmp = i2v_GENERAL_NAME(method, desc->location, tret);
|
||||
if (tmp == NULL)
|
||||
goto err;
|
||||
tret = tmp;
|
||||
vtmp = sk_CONF_VALUE_value(tret, i);
|
||||
i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method);
|
||||
nlen = strlen(objtmp) + strlen(vtmp->name) + 5;
|
||||
ntmp = OPENSSL_malloc(nlen);
|
||||
if (!ntmp) {
|
||||
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
if (ntmp == NULL)
|
||||
goto err;
|
||||
BUF_strlcpy(ntmp, objtmp, nlen);
|
||||
BUF_strlcat(ntmp, " - ", nlen);
|
||||
BUF_strlcat(ntmp, vtmp->name, nlen);
|
||||
@ -142,9 +144,15 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
|
||||
vtmp->name = ntmp;
|
||||
|
||||
}
|
||||
if (!ret)
|
||||
if (ret == NULL && tret == NULL)
|
||||
return sk_CONF_VALUE_new_null();
|
||||
return ret;
|
||||
|
||||
return tret;
|
||||
err:
|
||||
OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
|
||||
if (ret == NULL && tret != NULL)
|
||||
sk_CONF_VALUE_pop_free(tret, X509V3_conf_free);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
|
||||
|
Loading…
Reference in New Issue
Block a user