From d2d8abd66012c4d046a3c116996d4d8d690f3ff3 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 3 Nov 2013 14:28:42 +0000 Subject: [PATCH] various: fix memory leaks Signed-off-by: Sami Kerola --- src/dhcpd-pools.c | 2 ++ src/hash.c | 1 + src/other.c | 12 +++++++----- src/sort.c | 1 + 4 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/dhcpd-pools.c b/src/dhcpd-pools.c index c50fcfb..12c26ae 100644 --- a/src/dhcpd-pools.c +++ b/src/dhcpd-pools.c @@ -178,6 +178,7 @@ int main(int argc, char **argv) config.output_limit[i] = optarg[i] - '0'; } else { + clean_up(); errx(EXIT_FAILURE, "main: output mask `%s' is illegal", optarg); @@ -242,6 +243,7 @@ int main(int argc, char **argv) output_analysis = output_csv; break; default: + clean_up(); errx(EXIT_FAILURE, "main: unknown output format `%c'", config.output_format[0]); } diff --git a/src/hash.c b/src/hash.c index d598b74..2f38550 100644 --- a/src/hash.c +++ b/src/hash.c @@ -109,6 +109,7 @@ void delete_all_leases(void) { struct leases_t *l, *tmp; HASH_ITER(hh, leases, l, tmp) { + free(l->ethernet); HASH_DEL(leases, l); free(l); } diff --git a/src/other.c b/src/other.c index 75158a0..b59e5fd 100644 --- a/src/other.c +++ b/src/other.c @@ -411,16 +411,18 @@ void clean_up(void) if (fflush(NULL)) { warn("clean_up: fflush"); } - num_shared_networks++; - for (i = 0; i < num_shared_networks; i++) { - free((shared_networks + i)->name); - } free(config.dhcpdconf_file); free(config.dhcpdlease_file); free(config.output_file); free(ranges); delete_all_leases(); - free(shared_networks); + if (shared_networks) { + num_shared_networks++; + for (i = 0; i < num_shared_networks; i++) { + free((shared_networks + i)->name); + } + free(shared_networks); + } } /*! \brief A version printing. */ diff --git a/src/sort.c b/src/sort.c index a2eaa18..a48b905 100644 --- a/src/sort.c +++ b/src/sort.c @@ -213,6 +213,7 @@ comparer_t field_selector(char c) case 'e': return comp_tcperc; default: + clean_up(); warnx("field_selector: unknown sort order `%c'", c); errx(EXIT_FAILURE, "Try `%s --help' for more information.", program_name);