changeset 19995:8891fcb7ea87

lib-master: Fixed memory leaks when failing to read settings.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 10 Apr 2016 14:57:48 +0300
parents c497744ad9ba
children dbbcfdb60f1e
files src/lib-master/master-service-settings.c
diffstat 1 files changed, 7 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-master/master-service-settings.c	Thu Apr 07 17:50:28 2016 +0300
+++ b/src/lib-master/master-service-settings.c	Sun Apr 10 14:57:48 2016 +0300
@@ -483,6 +483,7 @@
 			}
 			i_close_fd(&fd);
 			config_exec_fallback(service, input);
+			settings_parser_deinit(&parser);
 			return -1;
 		}
 
@@ -498,19 +499,23 @@
 
 	if (use_environment || service->keep_environment) {
 		if (settings_parse_environ(parser) < 0) {
-			*error_r = settings_parser_get_error(parser);
+			*error_r = t_strdup(settings_parser_get_error(parser));
+			settings_parser_deinit(&parser);
 			return -1;
 		}
 	}
 
 	if (array_is_created(&service->config_overrides)) {
 		if (master_service_apply_config_overrides(service, parser,
-							  error_r) < 0)
+							  error_r) < 0) {
+			settings_parser_deinit(&parser);
 			return -1;
+		}
 	}
 
 	if (!settings_parser_check(parser, service->set_pool, &error)) {
 		*error_r = t_strdup_printf("Invalid settings: %s", error);
+		settings_parser_deinit(&parser);
 		return -1;
 	}