summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjulien.pierre.bugs%sun.com <devnull@localhost>2006-05-04 01:05:56 +0000
committerjulien.pierre.bugs%sun.com <devnull@localhost>2006-05-04 01:05:56 +0000
commit13de78ed17f12283a25de2e4af6bc479b9e73769 (patch)
treec557857b9c481c3b587f377fa1016e5c5537b897
parent688bc34cf89dcae671a0438a64e83ea3b87290dd (diff)
downloadnss-hg-13de78ed17f12283a25de2e4af6bc479b9e73769.tar.gz
Fix for bug 336335 - memory leaks in ECC code. r=wtchang
-rw-r--r--security/nss/lib/freebl/ecl/ecl.c16
-rw-r--r--security/nss/lib/freebl/ecl/ecl_curve.c2
-rw-r--r--security/nss/lib/freebl/ecl/ecl_gf.c4
3 files changed, 15 insertions, 7 deletions
diff --git a/security/nss/lib/freebl/ecl/ecl.c b/security/nss/lib/freebl/ecl/ecl.c
index e7b09d917..4521e5b57 100644
--- a/security/nss/lib/freebl/ecl/ecl.c
+++ b/security/nss/lib/freebl/ecl/ecl.c
@@ -55,23 +55,24 @@ ECGroup_new()
if (group == NULL)
return NULL;
group->constructed = MP_YES;
+ group->meth = NULL;
group->text = NULL;
MP_DIGITS(&group->curvea) = 0;
MP_DIGITS(&group->curveb) = 0;
MP_DIGITS(&group->genx) = 0;
MP_DIGITS(&group->geny) = 0;
MP_DIGITS(&group->order) = 0;
- MP_CHECKOK(mp_init(&group->curvea));
- MP_CHECKOK(mp_init(&group->curveb));
- MP_CHECKOK(mp_init(&group->genx));
- MP_CHECKOK(mp_init(&group->geny));
- MP_CHECKOK(mp_init(&group->order));
group->base_point_mul = NULL;
group->points_mul = NULL;
group->validate_point = NULL;
group->extra1 = NULL;
group->extra2 = NULL;
group->extra_free = NULL;
+ MP_CHECKOK(mp_init(&group->curvea));
+ MP_CHECKOK(mp_init(&group->curveb));
+ MP_CHECKOK(mp_init(&group->genx));
+ MP_CHECKOK(mp_init(&group->geny));
+ MP_CHECKOK(mp_init(&group->order));
CLEANUP:
if (res != MP_OKAY) {
@@ -412,6 +413,11 @@ ECGroup_free(ECGroup *group)
GFMethod_free(group->meth);
if (group->constructed == MP_NO)
return;
+ mp_clear(&group->curvea);
+ mp_clear(&group->curveb);
+ mp_clear(&group->genx);
+ mp_clear(&group->geny);
+ mp_clear(&group->order);
if (group->text != NULL)
free(group->text);
if (group->extra_free != NULL)
diff --git a/security/nss/lib/freebl/ecl/ecl_curve.c b/security/nss/lib/freebl/ecl/ecl_curve.c
index 8d265ef25..a0a7bd316 100644
--- a/security/nss/lib/freebl/ecl/ecl_curve.c
+++ b/security/nss/lib/freebl/ecl/ecl_curve.c
@@ -51,7 +51,7 @@ ECCurveParams_dup(const ECCurveParams * params)
int res = 1;
ECCurveParams *ret = NULL;
- CHECK(ret = (ECCurveParams *) malloc(sizeof(ECCurveParams)));
+ CHECK(ret = (ECCurveParams *) calloc(1, sizeof(ECCurveParams)));
if (params->text != NULL) {
CHECK(ret->text = strdup(params->text));
}
diff --git a/security/nss/lib/freebl/ecl/ecl_gf.c b/security/nss/lib/freebl/ecl/ecl_gf.c
index c64ecdc83..08fa0c3e0 100644
--- a/security/nss/lib/freebl/ecl/ecl_gf.c
+++ b/security/nss/lib/freebl/ecl/ecl_gf.c
@@ -53,8 +53,9 @@ GFMethod_new()
if (meth == NULL)
return NULL;
meth->constructed = MP_YES;
- MP_CHECKOK(mp_init(&meth->irr));
+ MP_DIGITS(&meth->irr) = 0;
meth->extra_free = NULL;
+ MP_CHECKOK(mp_init(&meth->irr));
CLEANUP:
if (res != MP_OKAY) {
@@ -185,6 +186,7 @@ GFMethod_free(GFMethod *meth)
return;
if (meth->constructed == MP_NO)
return;
+ mp_clear(&meth->irr);
if (meth->extra_free != NULL)
meth->extra_free(meth);
free(meth);