提交 32f3b98d 编写于 作者: A Andy Polyakov

crypto/x509v3/v3_utl.c, ssl/ssl_cert.c: fix Coverity problems.

Reviewed-by: NRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4492)
上级 65e6b9a4
...@@ -38,6 +38,7 @@ int X509V3_add_value(const char *name, const char *value, ...@@ -38,6 +38,7 @@ int X509V3_add_value(const char *name, const char *value,
{ {
CONF_VALUE *vtmp = NULL; CONF_VALUE *vtmp = NULL;
char *tname = NULL, *tvalue = NULL; char *tname = NULL, *tvalue = NULL;
int sk_allocated = (*extlist == NULL);
if (name && (tname = OPENSSL_strdup(name)) == NULL) if (name && (tname = OPENSSL_strdup(name)) == NULL)
goto err; goto err;
...@@ -45,7 +46,7 @@ int X509V3_add_value(const char *name, const char *value, ...@@ -45,7 +46,7 @@ int X509V3_add_value(const char *name, const char *value,
goto err; goto err;
if ((vtmp = OPENSSL_malloc(sizeof(*vtmp))) == NULL) if ((vtmp = OPENSSL_malloc(sizeof(*vtmp))) == NULL)
goto err; goto err;
if (*extlist == NULL && (*extlist = sk_CONF_VALUE_new_null()) == NULL) if (sk_allocated && (*extlist = sk_CONF_VALUE_new_null()) == NULL)
goto err; goto err;
vtmp->section = NULL; vtmp->section = NULL;
vtmp->name = tname; vtmp->name = tname;
...@@ -55,6 +56,8 @@ int X509V3_add_value(const char *name, const char *value, ...@@ -55,6 +56,8 @@ int X509V3_add_value(const char *name, const char *value,
return 1; return 1;
err: err:
X509V3err(X509V3_F_X509V3_ADD_VALUE, ERR_R_MALLOC_FAILURE); X509V3err(X509V3_F_X509V3_ADD_VALUE, ERR_R_MALLOC_FAILURE);
if (sk_allocated)
sk_CONF_VALUE_free(*extlist);
OPENSSL_free(vtmp); OPENSSL_free(vtmp);
OPENSSL_free(tname); OPENSSL_free(tname);
OPENSSL_free(tvalue); OPENSSL_free(tvalue);
......
...@@ -468,18 +468,20 @@ STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk) ...@@ -468,18 +468,20 @@ STACK_OF(X509_NAME) *SSL_dup_CA_list(const STACK_OF(X509_NAME) *sk)
SSLerr(SSL_F_SSL_DUP_CA_LIST, ERR_R_MALLOC_FAILURE); SSLerr(SSL_F_SSL_DUP_CA_LIST, ERR_R_MALLOC_FAILURE);
return NULL; return NULL;
} }
if (!sk_X509_NAME_reserve(ret, num)) if (!sk_X509_NAME_reserve(ret, num)) {
sk_X509_NAME_free(ret);
return NULL; return NULL;
}
for (i = 0; i < num; i++) { for (i = 0; i < num; i++) {
name = X509_NAME_dup(sk_X509_NAME_value(sk, i)); name = X509_NAME_dup(sk_X509_NAME_value(sk, i));
if (name == NULL) { if (name == NULL) {
SSLerr(SSL_F_SSL_DUP_CA_LIST, ERR_R_MALLOC_FAILURE);
sk_X509_NAME_pop_free(ret, X509_NAME_free); sk_X509_NAME_pop_free(ret, X509_NAME_free);
X509_NAME_free(name);
return NULL; return NULL;
} }
sk_X509_NAME_push(ret, name); /* Cannot fail after reserve call */ sk_X509_NAME_push(ret, name); /* Cannot fail after reserve call */
} }
return (ret); return ret;
} }
void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list) void SSL_set0_CA_list(SSL *s, STACK_OF(X509_NAME) *name_list)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册