From 53501b743f6cfa0032e0f3cddc5d1f004aa1820a Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Wed, 3 Mar 2021 18:06:50 +0100 Subject: [PATCH] client: report invalid values in doffset and dfreq commands --- client.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/client.c b/client.c index 45239c65..400ec1b9 100644 --- a/client.c +++ b/client.c @@ -987,35 +987,41 @@ process_cmd_cmdaccheck(CMD_Request *msg, char *line) /* ================================================== */ -static void +static int process_cmd_dfreq(CMD_Request *msg, char *line) { double dfreq; + msg->command = htons(REQ_DFREQ); - if (sscanf(line, "%lf", &dfreq) == 1) { - msg->data.dfreq.dfreq = UTI_FloatHostToNetwork(dfreq); - } else { - msg->data.dfreq.dfreq = UTI_FloatHostToNetwork(0.0); + + if (sscanf(line, "%lf", &dfreq) != 1) { + LOG(LOGS_ERR, "Invalid value"); + return 0; } + + msg->data.dfreq.dfreq = UTI_FloatHostToNetwork(dfreq); + return 1; } /* ================================================== */ -static void +static int process_cmd_doffset(CMD_Request *msg, char *line) { struct timeval tv; double doffset; msg->command = htons(REQ_DOFFSET); - if (sscanf(line, "%lf", &doffset) == 1) { - UTI_DoubleToTimeval(doffset, &tv); - msg->data.doffset.sec = htonl(tv.tv_sec); - msg->data.doffset.usec = htonl(tv.tv_usec); - } else { - msg->data.doffset.sec = htonl(0); - msg->data.doffset.usec = htonl(0); + + if (sscanf(line, "%lf", &doffset) != 1) { + LOG(LOGS_ERR, "Invalid value"); + return 0; } + + UTI_DoubleToTimeval(doffset, &tv); + msg->data.doffset.sec = htonl(tv.tv_sec); + msg->data.doffset.usec = htonl(tv.tv_usec); + return 1; } /* ================================================== */ @@ -3267,12 +3273,12 @@ process_line(char *line) do_normal_submit = process_cmd_deny(&tx_message, line); } } else if (!strcmp(command, "dfreq")) { - process_cmd_dfreq(&tx_message, line); + do_normal_submit = process_cmd_dfreq(&tx_message, line); } else if (!strcmp(command, "dns")) { ret = process_cmd_dns(line); do_normal_submit = 0; } else if (!strcmp(command, "doffset")) { - process_cmd_doffset(&tx_message, line); + do_normal_submit = process_cmd_doffset(&tx_message, line); } else if (!strcmp(command, "dump")) { process_cmd_dump(&tx_message, line); } else if (!strcmp(command, "exit")) { -- 2.47.2