From 455dd6e0a7eb8aadc77acc4c37d20313bd42ae90 Mon Sep 17 00:00:00 2001 From: Vsevolod Stakhov Date: Wed, 16 Dec 2015 00:32:47 +0000 Subject: [PATCH] Fix some border cases in control logic --- src/fuzzy_storage.c | 3 ++- src/libserver/rspamd_control.c | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/fuzzy_storage.c b/src/fuzzy_storage.c index 34b5e631f2..72e3bff038 100644 --- a/src/fuzzy_storage.c +++ b/src/fuzzy_storage.c @@ -1089,7 +1089,8 @@ fuzzy_peer_rep (struct rspamd_worker *worker, ctx->peer_fd = rep_fd; if (rep_fd == -1) { - msg_warn ("cannot receive peer fd from the main process"); + msg_err ("cannot receive peer fd from the main process"); + exit (EXIT_FAILURE); } /* Start listening */ diff --git a/src/libserver/rspamd_control.c b/src/libserver/rspamd_control.c index b683ac46ff..df9746abfa 100644 --- a/src/libserver/rspamd_control.c +++ b/src/libserver/rspamd_control.c @@ -543,10 +543,14 @@ rspamd_control_default_worker_handler (gint fd, short what, gpointer ud) r = read (fd, &cmd, sizeof (cmd)); - if (r != sizeof (cmd)) { + if (r == -1) { msg_err ("cannot read request from the control socket: %s", strerror (errno)); } + else if (r < (gint)sizeof (cmd)) { + msg_err ("short read of control command: %d of %d", (gint)r, + (gint)sizeof (cmd)); + } else if ((gint)cmd.type >= 0 && cmd.type < RSPAMD_CONTROL_MAX) { if (cd->handlers[cmd.type].handler) { @@ -557,6 +561,9 @@ rspamd_control_default_worker_handler (gint fd, short what, gpointer ud) rspamd_control_default_cmd_handler (fd, cd, &cmd); } } + else { + msg_err ("unknown command: %d", (gint)cmd.type); + } } void -- 2.47.3