From 579f56df3547a048ca9ab383defc46abc4b10f21 Mon Sep 17 00:00:00 2001 From: Bogomil Vasilev Date: Wed, 9 Jan 2019 22:44:55 +0200 Subject: [PATCH] fix confparser leaks reported by scan-build, add scan script --- .gitignore | 2 ++ analyze-clean.sh | 12 ++++++++++++ runme.sh | 2 -- src/confparser.c | 12 ++++++++++-- src/job_queue.c | 3 ++- 5 files changed, 26 insertions(+), 5 deletions(-) create mode 100755 analyze-clean.sh delete mode 100755 runme.sh diff --git a/.gitignore b/.gitignore index 893d686..d0514ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ tmp/* *.o *.bak +.project +runme.sh rmpsd agent/*.o agent/agent diff --git a/analyze-clean.sh b/analyze-clean.sh new file mode 100755 index 0000000..ea373dc --- /dev/null +++ b/analyze-clean.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +report_dir=scan-build-$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 6 | head -n 1) + +if make clean ; then + scan-build -o "$report_dir" make -j CC=clang + if ls "$report_dir" ; then + scan-view "$report_dir"/* + rm -rf "$report_dir" + fi +fi + diff --git a/runme.sh b/runme.sh deleted file mode 100755 index adaf855..0000000 --- a/runme.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -./build/rmpsd start --daemonize=no diff --git a/src/confparser.c b/src/confparser.c index f9a71c4..5e323f4 100644 --- a/src/confparser.c +++ b/src/confparser.c @@ -118,7 +118,7 @@ void confexport(void) conf.rmps.client_poolsize ); } - +/* static int fopen_and_mkdir(const char *dir) { char tmp[256]; @@ -154,7 +154,7 @@ static int fopen_and_mkdir(const char *dir) fclose(fp); return 0; } - +*/ static int test_conf_perms(char *config) { @@ -167,22 +167,26 @@ static int test_conf_perms(char *config) if (errno == ENOENT) { enumtostr(confresult, CONF_MISSING); log(ERROR, confresult, config); + free(config_copy); return 1; } } else { if (!S_ISREG(s.st_mode)) { enumtostr(confresult, CONF_NOTFILE); log(ERROR, confresult, config); + //free(config_copy); return 1; } if (!(0400 & s.st_mode)) { enumtostr(confresult, CONF_PERM); log(ERROR, confresult, config); + free(config_copy); return 1; } if (access(config, R_OK) != 0) { enumtostr(confresult, CONF_NOT_READABLE); log(ERROR, confresult, config); + free(config_copy); return 1; } if (s.st_uid != 0) { @@ -204,18 +208,21 @@ static int test_conf_perms(char *config) if (errno == ENOENT) { enumtostr(confresult, CONF_DIR_MISSING); log(ERROR, confresult, config_copy); + free(config_copy); return 1; } } else { if (!S_ISDIR(s.st_mode)) { enumtostr(confresult, CONF_DIR_NOTDIR); log(ERROR, confresult, config_copy); + free(config_copy); return 1; } if (!(0400 & s.st_mode) || !(0100 & s.st_mode)) { enumtostr(confresult, CONF_DIR_PERM); log(ERROR, confresult, config_copy); + free(config_copy); return 1; } if (s.st_uid != 0) { @@ -230,6 +237,7 @@ static int test_conf_perms(char *config) log(WARNING, confresult, config_copy); } } + free(config_copy); return 0; /* conf is readable */ } diff --git a/src/job_queue.c b/src/job_queue.c index 8efb913..8afe811 100644 --- a/src/job_queue.c +++ b/src/job_queue.c @@ -68,9 +68,10 @@ int add_msg_to_queue(int id, struct msg_t buf) } return -1; } - +/* void create_job(struct msg_t buf) { // add_job_in_db(); } +*/