From 0ba4f18ea6981b4d2b4eded11b2da4b2a2192d5b Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Sun, 21 Jun 2020 21:39:15 +0200 Subject: Finish up the assert conversion --- main.c | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index ba9ea37..5d99711 100644 --- a/main.c +++ b/main.c @@ -57,6 +57,8 @@ msg(enum debug_lvl lvl, const char *fmt, va_list ap) const char *color; const char *sd_lvl; + assert_return(lvl != 0 && !empty_str(fmt) && ap); + while (first) { int fd; const char *e; @@ -149,6 +151,8 @@ __debug(enum debug_lvl lvl, const char *fmt, ...) { va_list ap; + assert_return(lvl != 0 && !empty_str(fmt)); + va_start(ap, fmt); msg(lvl, fmt, ap); va_end(ap); @@ -159,9 +163,13 @@ __die(const char *fmt, ...) { va_list ap; - va_start(ap, fmt); - msg(DBG_ERROR, fmt, ap); - va_end(ap); + if (!empty_str(fmt)) { + va_start(ap, fmt); + msg(DBG_ERROR, fmt, ap); + va_end(ap); + } else + error("fmt not set"); + sd_notifyf(0, "STATUS=Error, shutting down"); exit(EXIT_FAILURE); }; @@ -171,6 +179,8 @@ cfg_free(struct uring_task *task) { struct cfg *cfg = container_of(task, struct cfg, task); + assert_return(task); + debug(DBG_SIG, "called"); systemd_delete(cfg); xfree(cfg->igmp_iface); @@ -213,6 +223,8 @@ cfg_read(struct cfg *cfg) size_t rd = 0; size_t r; + assert_return(cfg); + if (cfg->cfg_path) path = cfg->cfg_path; else @@ -353,7 +365,7 @@ usage(int argc, char **argv, bool invalid) " -d, --debug=CATEGORY\tenable debugging for CATEGORY\n" "\t\t\t(use \"list\" to see available categories,\n" "\t\t\t or \"all\" to enable all categories)\n", - argv[0]); + argv ? argv[0] : "mcproxy"); exit(invalid ? EXIT_FAILURE : EXIT_SUCCESS); } @@ -365,13 +377,15 @@ cfg_init(int argc, char **argv) int c; unsigned i; + assert_die(argc > 0 && argv, "invalid arguments"); + cfg = zmalloc(sizeof(*cfg)); if (!cfg) die("malloc: %m"); cfg->uid = geteuid(); cfg->gid = getegid(); - uring_task_init(&cfg->task, "cfg", NULL, cfg_free); + uring_task_init(cfg, &cfg->task, "cfg", NULL, cfg_free); list_init(&cfg->servers); while (true) { @@ -475,6 +489,9 @@ cfg_init(int argc, char **argv) static void cfg_apply(struct cfg *cfg) { + if (!cfg) + die("invalid arguments"); + if (cfg->uid == 0 || cfg->gid == 0) /* This catches both -u root and running as root without -u */ die("Execution as root is not supported (use -u )"); @@ -538,6 +555,8 @@ signalfd_free(struct uring_task *task) { struct signalfd_ev *sev = container_of(task, struct signalfd_ev, task); + assert_return(task); + debug(DBG_SIG, "called"); sev->cfg->sev = NULL; xfree(sev); @@ -548,6 +567,8 @@ dump_tree(struct cfg *cfg) { struct server *server; + assert_return(cfg); + if (!debug_enabled(DBG_REF)) return; @@ -576,6 +597,7 @@ signalfd_read(struct cfg *cfg, struct uring_task *task, int res) struct signalfd_ev *sev = container_of(task, struct signalfd_ev, task); struct server *server, *stmp; + assert_return(cfg && task); assert_task_alive(DBG_SIG, task); if (res != sizeof(sev->buf)) @@ -621,6 +643,8 @@ hack_handler(int signum, siginfo_t *info, void *ucontext) { uint64_t val; + assert_return(signum > 0 && info); + switch (signum) { case SIGUSR1: debug(DBG_SIG, "Got a SIGUSR1"); @@ -660,6 +684,8 @@ signalfd_init(struct cfg *cfg) //sigset_t mask; struct signalfd_ev *sev; + assert_return(cfg); + sev = zmalloc(sizeof(*sev)); if (!sev) die("malloc: %m"); @@ -667,11 +693,11 @@ signalfd_init(struct cfg *cfg) /* sigfillset(&mask); if (sigprocmask(SIG_BLOCK, &mask, NULL) < 0) - perrordie("sigprocmask"); + die("sigprocmask: %m"); sfd = signalfd(-1, &mask, SFD_CLOEXEC); if (sfd < 0) - perrordie("signalfd"); + die("signalfd: %m"); */ struct sigaction action; @@ -693,7 +719,7 @@ signalfd_init(struct cfg *cfg) die("eventfd: %m"); debug(DBG_SIG, "using fd %i", sfd); - uring_task_init(&sev->task, "sev", uring_parent(cfg), signalfd_free); + uring_task_init(cfg, &sev->task, "sev", uring_parent(cfg), signalfd_free); uring_task_set_fd(&sev->task, sfd); cfg->sev = sev; sev->cfg = cfg; -- cgit v1.2.3