diff options
author | Vladimir Kobal <vlad@prokk.net> | 2019-05-14 18:35:12 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-14 18:35:12 +0300 |
commit | 0d5fa83e224afa6d530ed6a5e6e6fe35a8af955e (patch) | |
tree | 99a1a33870b26e93b18693dc2775888abcd298b6 | |
parent | 1833691018fda9eb6b80eed373c482a394a1267e (diff) |
Fix segmentation fault (#6011)
* Fix segmentation fault
* Make system info printing safe
* Fix quotes for OS name
-rw-r--r-- | database/rrdhost.c | 39 | ||||
-rw-r--r-- | streaming/rrdpush.c | 28 | ||||
-rw-r--r-- | web/api/web_api_v1.c | 26 |
3 files changed, 53 insertions, 40 deletions
diff --git a/database/rrdhost.c b/database/rrdhost.c index de0366267c..3b06ed1ada 100644 --- a/database/rrdhost.c +++ b/database/rrdhost.c @@ -825,19 +825,32 @@ struct rrdhost_system_info *rrdhost_system_info_dup(struct rrdhost_system_info * struct rrdhost_system_info *ret = callocz(1, sizeof(struct rrdhost_system_info)); if(likely(system_info)) { - ret->os_name = strdupz(system_info->os_name); - ret->os_id = strdupz(system_info->os_id); - ret->os_id_like = strdupz(system_info->os_id_like); - ret->os_version = strdupz(system_info->os_version); - ret->os_version_id = strdupz(system_info->os_version_id); - ret->os_detection = strdupz(system_info->os_detection); - ret->kernel_name = strdupz(system_info->kernel_name); - ret->kernel_version = strdupz(system_info->kernel_version); - ret->architecture = strdupz(system_info->architecture); - ret->virtualization = strdupz(system_info->virtualization); - ret->virt_detection = strdupz(system_info->virt_detection); - ret->container = strdupz(system_info->container); - ret->container_detection = strdupz(system_info->container_detection); + if(system_info->os_name) + ret->os_name = strdupz(system_info->os_name); + if(system_info->os_id) + ret->os_id = strdupz(system_info->os_id); + if(system_info->os_id_like) + ret->os_id_like = strdupz(system_info->os_id_like); + if(system_info->os_version) + ret->os_version = strdupz(system_info->os_version); + if(system_info->os_version_id) + ret->os_version_id = strdupz(system_info->os_version_id); + if(system_info->os_detection) + ret->os_detection = strdupz(system_info->os_detection); + if(system_info->kernel_name) + ret->kernel_name = strdupz(system_info->kernel_name); + if(system_info->kernel_version) + ret->kernel_version = strdupz(system_info->kernel_version); + if(system_info->architecture) + ret->architecture = strdupz(system_info->architecture); + if(system_info->virtualization) + ret->virtualization = strdupz(system_info->virtualization); + if(system_info->virt_detection) + ret->virt_detection = strdupz(system_info->virt_detection); + if(system_info->container) + ret->container = strdupz(system_info->container); + if(system_info->container_detection) + ret->container_detection = strdupz(system_info->container_detection); } return ret; diff --git a/streaming/rrdpush.c b/streaming/rrdpush.c index 5467b65fb7..2e9050ff28 100644 --- a/streaming/rrdpush.c +++ b/streaming/rrdpush.c @@ -469,20 +469,20 @@ static int rrdpush_sender_thread_connect_to_master(RRDHOST *host, int default_po , default_rrd_update_every , host->os , host->timezone - , (host->tags)?host->tags:"" - , host->system_info->os_name - , host->system_info->os_id - , host->system_info->os_id_like - , host->system_info->os_version - , host->system_info->os_version_id - , host->system_info->os_detection - , host->system_info->kernel_name - , host->system_info->kernel_version - , host->system_info->architecture - , host->system_info->virtualization - , host->system_info->virt_detection - , host->system_info->container - , host->system_info->container_detection + , (host->tags) ? host->tags : "" + , (host->system_info->os_name) ? host->system_info->os_name : "" + , (host->system_info->os_id) ? host->system_info->os_id : "" + , (host->system_info->os_id_like) ? host->system_info->os_id_like : "" + , (host->system_info->os_version) ? host->system_info->os_version : "" + , (host->system_info->os_version_id) ? host->system_info->os_version_id : "" + , (host->system_info->os_detection) ? host->system_info->os_detection : "" + , (host->system_info->kernel_name) ? host->system_info->kernel_name : "" + , (host->system_info->kernel_version) ? host->system_info->kernel_version : "" + , (host->system_info->architecture) ? host->system_info->architecture : "" + , (host->system_info->virtualization) ? host->system_info->virtualization : "" + , (host->system_info->virt_detection) ? host->system_info->virt_detection : "" + , (host->system_info->container) ? host->system_info->container : "" + , (host->system_info->container_detection) ? host->system_info->container_detection : "" , host->program_name , host->program_version ); diff --git a/web/api/web_api_v1.c b/web/api/web_api_v1.c index 04c9198cca..7c0d728bf8 100644 --- a/web/api/web_api_v1.c +++ b/web/api/web_api_v1.c @@ -736,19 +736,19 @@ inline int web_client_api_request_v1_info(RRDHOST *host, struct web_client *w, c web_client_api_request_v1_info_summary_alarm_statuses(host, wb); buffer_strcat(wb, "\t},\n"); - buffer_sprintf(wb, "\t\"os_name\": %s,\n", host->system_info->os_name); - buffer_sprintf(wb, "\t\"os_id\": \"%s\",\n", host->system_info->os_id); - buffer_sprintf(wb, "\t\"os_id_like\": \"%s\",\n", host->system_info->os_id_like); - buffer_sprintf(wb, "\t\"os_version\": \"%s\",\n", host->system_info->os_version); - buffer_sprintf(wb, "\t\"os_version_id\": \"%s\",\n", host->system_info->os_version_id); - buffer_sprintf(wb, "\t\"os_detection\": \"%s\",\n", host->system_info->os_detection); - buffer_sprintf(wb, "\t\"kernel_name\": \"%s\",\n", host->system_info->kernel_name); - buffer_sprintf(wb, "\t\"kernel_version\": \"%s\",\n", host->system_info->kernel_version); - buffer_sprintf(wb, "\t\"architecture\": \"%s\",\n", host->system_info->architecture); - buffer_sprintf(wb, "\t\"virtualization\": \"%s\",\n", host->system_info->virtualization); - buffer_sprintf(wb, "\t\"virt_detection\": \"%s\",\n", host->system_info->virt_detection); - buffer_sprintf(wb, "\t\"container\": \"%s\",\n", host->system_info->container); - buffer_sprintf(wb, "\t\"container_detection\": \"%s\",\n", host->system_info->container_detection); + buffer_sprintf(wb, "\t\"os_name\": %s,\n", (host->system_info->os_name) ? host->system_info->os_name : "\"\""); + buffer_sprintf(wb, "\t\"os_id\": \"%s\",\n", (host->system_info->os_id) ? host->system_info->os_id : ""); + buffer_sprintf(wb, "\t\"os_id_like\": \"%s\",\n", (host->system_info->os_id_like) ? host->system_info->os_id_like : ""); + buffer_sprintf(wb, "\t\"os_version\": \"%s\",\n", (host->system_info->os_version) ? host->system_info->os_version : ""); + buffer_sprintf(wb, "\t\"os_version_id\": \"%s\",\n", (host->system_info->os_version_id) ? host->system_info->os_version_id : ""); + buffer_sprintf(wb, "\t\"os_detection\": \"%s\",\n", (host->system_info->os_detection) ? host->system_info->os_detection : ""); + buffer_sprintf(wb, "\t\"kernel_name\": \"%s\",\n", (host->system_info->kernel_name) ? host->system_info->kernel_name : ""); + buffer_sprintf(wb, "\t\"kernel_version\": \"%s\",\n", (host->system_info->kernel_version) ? host->system_info->kernel_version : ""); + buffer_sprintf(wb, "\t\"architecture\": \"%s\",\n", (host->system_info->architecture) ? host->system_info->architecture : ""); + buffer_sprintf(wb, "\t\"virtualization\": \"%s\",\n", (host->system_info->virtualization) ? host->system_info->virtualization : ""); + buffer_sprintf(wb, "\t\"virt_detection\": \"%s\",\n", (host->system_info->virt_detection) ? host->system_info->virt_detection : ""); + buffer_sprintf(wb, "\t\"container\": \"%s\",\n", (host->system_info->container) ? host->system_info->container : ""); + buffer_sprintf(wb, "\t\"container_detection\": \"%s\",\n", (host->system_info->container_detection) ? host->system_info->container_detection : ""); buffer_strcat(wb, "\t\"collectors\": ["); chartcollectors2json(host, wb); |