From 7d561af4235ffc6c0203fc66d4998c74384c7fa8 Mon Sep 17 00:00:00 2001 From: Yves Rutschle Date: Tue, 18 Apr 2017 21:04:30 +0200 Subject: [PATCH] allocate listen[] before writing to it... --- systemd-sslh-generator.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/systemd-sslh-generator.c b/systemd-sslh-generator.c index f9280ef..537d845 100644 --- a/systemd-sslh-generator.c +++ b/systemd-sslh-generator.c @@ -17,7 +17,7 @@ static char* resolve_listen(const char *hostname, const char *port) { } -static int get_listen_from_conf(const char *filename, char **listen) { +static int get_listen_from_conf(const char *filename, char **listen[]) { config_t config; config_setting_t *setting, *addr; const char *hostname, *port; @@ -39,6 +39,7 @@ static int get_listen_from_conf(const char *filename, char **listen) { setting = config_lookup(&config, "listen"); if (setting) { len = config_setting_length(setting); + *listen = malloc(len * sizeof(**listen)); for (int i = 0; i < len; i++) { addr = config_setting_get_elem(setting, i); if (! (config_setting_lookup_string(addr, "host", &hostname) && @@ -48,8 +49,8 @@ static int get_listen_from_conf(const char *filename, char **listen) { config_setting_source_line(addr)); return -1; } else { - listen[i] = malloc(strlen(resolve_listen(hostname, port))); - strcpy(listen[i], resolve_listen(hostname, port)); + (*listen)[i] = malloc(strlen(resolve_listen(hostname, port))); + strcpy((*listen)[i], resolve_listen(hostname, port)); } } } @@ -59,7 +60,7 @@ static int get_listen_from_conf(const char *filename, char **listen) { } -static int write_socket_unit(FILE *socket, char **listen, int num_addr, const char *source) { +static int write_socket_unit(FILE *socket, char *listen[], int num_addr, const char *source) { fprintf(socket, "# Automatically generated by systemd-sslh-generator\n\n" @@ -100,8 +101,7 @@ static int gen_sslh_config(char *runtime_unit_dir) { fclose(config); - - num_addr = get_listen_from_conf(sslh_conf, listen); + num_addr = get_listen_from_conf(sslh_conf, &listen); if (num_addr < 0) return -1;