diff options
author | Niels Möller <nisse@lysator.liu.se> | 2018-07-12 22:34:01 +0200 |
---|---|---|
committer | Niels Möller <nisse@lysator.liu.se> | 2018-07-12 22:34:01 +0200 |
commit | af7d1d76b03ef405e9f75ae28e8caf3b9d3d2b16 (patch) | |
tree | 1e40044ef1ef5e9f663e6850f60cd5570f66c97b | |
parent | 1da75fada9475e0172ed2a6186fb79ed8a543cb6 (diff) | |
download | nettle-af7d1d76b03ef405e9f75ae28e8caf3b9d3d2b16.tar.gz |
Make eccdata deallocate storage before exit.
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | eccdata.c | 26 |
2 files changed, 28 insertions, 0 deletions
@@ -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> @@ -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; } |