From af7d1d76b03ef405e9f75ae28e8caf3b9d3d2b16 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Niels=20M=C3=B6ller?= Date: Thu, 12 Jul 2018 22:34:01 +0200 Subject: [PATCH] Make eccdata deallocate storage before exit. --- ChangeLog | 2 ++ eccdata.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) 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 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; } -- 2.47.2