提交 75a3e392 编写于 作者: M Matt Caswell

Fix some error path logic in i2v_AUTHORITY_INFO_ACCESS and i2v_GENERAL_NAME

Fixes #1653 reported by Guido Vranken
Reviewed-by: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3362)
上级 33564cb7
...@@ -70,32 +70,39 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, ...@@ -70,32 +70,39 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
int i; int i;
switch (gen->type) { switch (gen->type) {
case GEN_OTHERNAME: case GEN_OTHERNAME:
X509V3_add_value("othername", "<unsupported>", &ret); if (!X509V3_add_value("othername", "<unsupported>", &ret))
return NULL;
break; break;
case GEN_X400: case GEN_X400:
X509V3_add_value("X400Name", "<unsupported>", &ret); if (!X509V3_add_value("X400Name", "<unsupported>", &ret))
return NULL;
break; break;
case GEN_EDIPARTY: case GEN_EDIPARTY:
X509V3_add_value("EdiPartyName", "<unsupported>", &ret); if (!X509V3_add_value("EdiPartyName", "<unsupported>", &ret))
return NULL;
break; break;
case GEN_EMAIL: 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; break;
case GEN_DNS: 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; break;
case GEN_URI: 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; break;
case GEN_DIRNAME: case GEN_DIRNAME:
X509_NAME_oneline(gen->d.dirn, oline, 256); if (X509_NAME_oneline(gen->d.dirn, oline, 256) == NULL
X509V3_add_value("DirName", oline, &ret); || !X509V3_add_value("DirName", oline, &ret))
return NULL;
break; break;
case GEN_IPADD: case GEN_IPADD:
...@@ -113,15 +120,18 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method, ...@@ -113,15 +120,18 @@ STACK_OF(CONF_VALUE) *i2v_GENERAL_NAME(X509V3_EXT_METHOD *method,
strcat(oline, ":"); strcat(oline, ":");
} }
} else { } else {
X509V3_add_value("IP Address", "<invalid>", &ret); if (!X509V3_add_value("IP Address", "<invalid>", &ret))
return NULL;
break; break;
} }
X509V3_add_value("IP Address", oline, &ret); if (!X509V3_add_value("IP Address", oline, &ret))
return NULL;
break; break;
case GEN_RID: case GEN_RID:
i2t_ASN1_OBJECT(oline, 256, gen->d.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; break;
} }
return ret; return ret;
......
...@@ -58,29 +58,30 @@ ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS) ...@@ -58,29 +58,30 @@ ASN1_ITEM_TEMPLATE_END(AUTHORITY_INFO_ACCESS)
IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS) IMPLEMENT_ASN1_FUNCTIONS(AUTHORITY_INFO_ACCESS)
static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(
*method, AUTHORITY_INFO_ACCESS X509V3_EXT_METHOD *method, AUTHORITY_INFO_ACCESS *ainfo,
*ainfo, STACK_OF(CONF_VALUE) STACK_OF(CONF_VALUE) *ret)
*ret)
{ {
ACCESS_DESCRIPTION *desc; ACCESS_DESCRIPTION *desc;
int i, nlen; int i, nlen;
char objtmp[80], *ntmp; char objtmp[80], *ntmp;
CONF_VALUE *vtmp; CONF_VALUE *vtmp;
STACK_OF(CONF_VALUE) *tret = ret;
for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) { for (i = 0; i < sk_ACCESS_DESCRIPTION_num(ainfo); i++) {
STACK_OF(CONF_VALUE) *tmp;
desc = sk_ACCESS_DESCRIPTION_value(ainfo, i); desc = sk_ACCESS_DESCRIPTION_value(ainfo, i);
ret = i2v_GENERAL_NAME(method, desc->location, ret); tmp = i2v_GENERAL_NAME(method, desc->location, tret);
if (!ret) if (tmp == NULL)
break; goto err;
vtmp = sk_CONF_VALUE_value(ret, i); tret = tmp;
vtmp = sk_CONF_VALUE_value(tret, i);
i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method); i2t_ASN1_OBJECT(objtmp, sizeof objtmp, desc->method);
nlen = strlen(objtmp) + strlen(vtmp->name) + 5; nlen = strlen(objtmp) + strlen(vtmp->name) + 5;
ntmp = OPENSSL_malloc(nlen); ntmp = OPENSSL_malloc(nlen);
if (ntmp == NULL) { if (ntmp == NULL)
X509V3err(X509V3_F_I2V_AUTHORITY_INFO_ACCESS, goto err;
ERR_R_MALLOC_FAILURE);
return NULL;
}
OPENSSL_strlcpy(ntmp, objtmp, nlen); OPENSSL_strlcpy(ntmp, objtmp, nlen);
OPENSSL_strlcat(ntmp, " - ", nlen); OPENSSL_strlcat(ntmp, " - ", nlen);
OPENSSL_strlcat(ntmp, vtmp->name, nlen); OPENSSL_strlcat(ntmp, vtmp->name, nlen);
...@@ -88,9 +89,15 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD ...@@ -88,9 +89,15 @@ static STACK_OF(CONF_VALUE) *i2v_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
vtmp->name = ntmp; vtmp->name = ntmp;
} }
if (!ret) if (ret == NULL && tret == NULL)
return sk_CONF_VALUE_new_null(); return sk_CONF_VALUE_new_null();
return ret;
return tret;
err:
X509V3err(X509V3_F_I2V_AUTHORITY_INFO_ACCESS, 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 static AUTHORITY_INFO_ACCESS *v2i_AUTHORITY_INFO_ACCESS(X509V3_EXT_METHOD
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册