From 0355cfad41931c5583e391bfcd2deb806a6d7f5e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se>
Date: Thu, 12 Jul 2018 22:37:36 +0200
Subject: [PATCH] Fix at-exit leak in eratosthenes program.

---
 ChangeLog               | 3 +++
 examples/eratosthenes.c | 5 +++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index ccf82494..0dbacaa0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2018-07-12  Niels Möller  <nisse@lysator.liu.se>
 
+	* examples/eratosthenes.c (main): Don't allocate bitmap storage
+	for limit == 2 (early exit), closing memory leak at exit.
+
 	* eccdata.c (output_curve): Replace mpz_init_set_ui by mpz_set_ui,
 	to fix memory leak.
 	(ecc_curve_clear): New function.
diff --git a/examples/eratosthenes.c b/examples/eratosthenes.c
index 7a54561d..415c6d25 100644
--- a/examples/eratosthenes.c
+++ b/examples/eratosthenes.c
@@ -314,8 +314,6 @@ main (int argc, char **argv)
   root = (root - 1) | 1;
   /* Represents odd numbers from 3 up. */
   sieve_nbits = (root - 1) / 2;
-  sieve = vector_alloc(sieve_nbits );
-  vector_init(sieve, sieve_nbits);
 
   if (verbose)
     fprintf(stderr, "Initial sieve using %lu bits.\n", sieve_nbits);
@@ -326,6 +324,9 @@ main (int argc, char **argv)
   if (limit == 2)
     return EXIT_SUCCESS;
 
+  sieve = vector_alloc(sieve_nbits);
+  vector_init(sieve, sieve_nbits);
+
   for (bit = 0;
        bit < sieve_nbits;
        bit = vector_find_next(sieve, bit + 1, sieve_nbits))
-- 
GitLab