提交 0110a470 编写于 作者: K Kazuki Yamaguchi 提交者: Matt Caswell

Fix a memory leak in EC_GROUP_get_ecparameters()

The variable 'buffer', allocated by EC_POINT_point2buf(), isn't
free'd on the success path.
Reviewed-by: NRich Salz <rsalz@openssl.org>
Reviewed-by: NMatt Caswell <matt@openssl.org>
上级 9ba6f347
......@@ -512,13 +512,11 @@ ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group,
goto err;
}
if (ret->base == NULL && (ret->base = ASN1_OCTET_STRING_new()) == NULL) {
OPENSSL_free(buffer);
ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_MALLOC_FAILURE);
goto err;
}
if (!ASN1_OCTET_STRING_set(ret->base, buffer, len)) {
ECerr(EC_F_EC_GROUP_GET_ECPARAMETERS, ERR_R_ASN1_LIB);
goto err;
}
ASN1_STRING_set0(ret->base, buffer, len);
/* set the order */
tmp = EC_GROUP_get0_order(group);
......@@ -547,7 +545,6 @@ ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group,
err:
if (params == NULL)
ECPARAMETERS_free(ret);
OPENSSL_free(buffer);
return NULL;
}
......
......@@ -1712,6 +1712,33 @@ static void nistp_tests()
}
# endif
static void parameter_test(void)
{
EC_GROUP *group, *group2;
ECPARAMETERS *ecparameters;
fprintf(stderr, "\ntesting ecparameters conversion ...");
group = EC_GROUP_new_by_curve_name(NID_secp112r1);
if (!group)
ABORT;
ecparameters = EC_GROUP_get_ecparameters(group, NULL);
if (!ecparameters)
ABORT;
group2 = EC_GROUP_new_from_ecparameters(ecparameters);
if (!group2)
ABORT;
if (EC_GROUP_cmp(group, group2, NULL))
ABORT;
fprintf(stderr, " ok\n");
EC_GROUP_free(group);
EC_GROUP_free(group2);
ECPARAMETERS_free(ecparameters);
}
static const char rnd_seed[] =
"string to make the random number generator think it has entropy";
......@@ -1737,6 +1764,8 @@ int main(int argc, char *argv[])
/* test the internal curves */
internal_curve_test();
parameter_test();
#ifndef OPENSSL_NO_CRYPTO_MDEBUG
if (CRYPTO_mem_leaks_fp(stderr) <= 0)
return 1;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册