summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNiels Möller <nisse@lysator.liu.se>2018-07-12 22:34:01 +0200
committerNiels Möller <nisse@lysator.liu.se>2018-07-12 22:34:01 +0200
commitaf7d1d76b03ef405e9f75ae28e8caf3b9d3d2b16 (patch)
tree1e40044ef1ef5e9f663e6850f60cd5570f66c97b
parent1da75fada9475e0172ed2a6186fb79ed8a543cb6 (diff)
downloadnettle-af7d1d76b03ef405e9f75ae28e8caf3b9d3d2b16.tar.gz
Make eccdata deallocate storage before exit.
-rw-r--r--ChangeLog2
-rw-r--r--eccdata.c26
2 files changed, 28 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 4141e57d..ccf82494 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,8 @@
* eccdata.c (output_curve): Replace mpz_init_set_ui by mpz_set_ui,
to fix memory leak.
+ (ecc_curve_clear): New function.
+ (main): Call it, to deallocate storage before exit.
2018-07-08 Niels Möller <nisse@lysator.liu.se>
diff --git a/eccdata.c b/eccdata.c
index 92e244bd..51ecde35 100644
--- a/eccdata.c
+++ b/eccdata.c
@@ -611,6 +611,31 @@ ecc_curve_init (struct ecc_curve *ecc, unsigned bit_size)
ecc->bit_size = bit_size;
}
+static void
+ecc_curve_clear (struct ecc_curve *ecc)
+{
+ mpz_clear (ecc->p);
+ mpz_clear (ecc->b);
+ mpz_clear (ecc->q);
+ ecc_clear (&ecc->g);
+ mpz_clear (ecc->d);
+ mpz_clear (ecc->t);
+ if (ecc->table)
+ {
+ size_t i;
+ for (i = 0; i < ecc->table_size; i++)
+ ecc_clear (&ecc->table[i]);
+ free (ecc->table);
+ }
+ if (ecc->ref)
+ {
+ size_t i;
+ for (i = 0; i < 3; i++)
+ ecc_clear (&ecc->ref[i]);
+ free (ecc->ref);
+ }
+}
+
static unsigned
ecc_table_size(unsigned bits, unsigned k, unsigned c)
{
@@ -1180,5 +1205,6 @@ main (int argc, char **argv)
if (argc > 4)
output_curve (&ecc, atoi(argv[4]));
+ ecc_curve_clear (&ecc);
return EXIT_SUCCESS;
}