提交 42328100 编写于 作者: M Matt Caswell

Don't leak memory on X509_TRUST_add() error path

The X509_TRUST_add() function was leaking an X509_TRUST object on error.
Reviewed-by: NRichard Levitte <levitte@openssl.org>
上级 69e2bd32
...@@ -148,7 +148,7 @@ int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), ...@@ -148,7 +148,7 @@ int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int),
/* dup supplied name */ /* dup supplied name */
if ((trtmp->name = OPENSSL_strdup(name)) == NULL) { if ((trtmp->name = OPENSSL_strdup(name)) == NULL) {
X509err(X509_F_X509_TRUST_ADD, ERR_R_MALLOC_FAILURE); X509err(X509_F_X509_TRUST_ADD, ERR_R_MALLOC_FAILURE);
return 0; goto err;
} }
/* Keep the dynamic flag of existing entry */ /* Keep the dynamic flag of existing entry */
trtmp->flags &= X509_TRUST_DYNAMIC; trtmp->flags &= X509_TRUST_DYNAMIC;
...@@ -165,14 +165,20 @@ int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int), ...@@ -165,14 +165,20 @@ int X509_TRUST_add(int id, int flags, int (*ck) (X509_TRUST *, X509 *, int),
if (trtable == NULL if (trtable == NULL
&& (trtable = sk_X509_TRUST_new(tr_cmp)) == NULL) { && (trtable = sk_X509_TRUST_new(tr_cmp)) == NULL) {
X509err(X509_F_X509_TRUST_ADD, ERR_R_MALLOC_FAILURE); X509err(X509_F_X509_TRUST_ADD, ERR_R_MALLOC_FAILURE);
return 0; goto err;;
} }
if (!sk_X509_TRUST_push(trtable, trtmp)) { if (!sk_X509_TRUST_push(trtable, trtmp)) {
X509err(X509_F_X509_TRUST_ADD, ERR_R_MALLOC_FAILURE); X509err(X509_F_X509_TRUST_ADD, ERR_R_MALLOC_FAILURE);
return 0; goto err;
} }
} }
return 1; return 1;
err:
if (idx == -1) {
OPENSSL_free(trtmp->name);
OPENSSL_free(trtmp);
}
return 0;
} }
static void trtable_free(X509_TRUST *p) static void trtable_free(X509_TRUST *p)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册