From 9f7a8dc8a6efab0b1486081744a8284d9e73b3e5 Mon Sep 17 00:00:00 2001 From: Alex 'AdUser' Z Date: Thu, 1 Apr 2021 14:29:21 +1000 Subject: [PATCH] * fix valgrind checks in f2b_cmd_*() & improve testing --- src/commands.c | 22 +++++++++++++--------- t/t_cmd.c | 18 ++++++++++++++++++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/commands.c b/src/commands.c index 33c76be..fa17c2f 100644 --- a/src/commands.c +++ b/src/commands.c @@ -137,22 +137,22 @@ f2b_cmd_create(const char *line) { assert(line != NULL); + while (isspace(*line)) line++; + if (strlen(line) <= 0) + return NULL; /* empty string */ + if ((cmd = calloc(1, sizeof(f2b_cmd_t))) == NULL) return NULL; - if (f2b_buf_alloc(&cmd->data, strlen(line))) { - if (f2b_cmd_parse(cmd, line)) - return cmd; - free(cmd); - cmd = NULL; - } - - - return cmd; + if (f2b_cmd_parse(cmd, line)) + return cmd; + free(cmd); + return NULL; } void f2b_cmd_destroy(f2b_cmd_t *cmd) { + if (!cmd) return; f2b_buf_free(&cmd->data); free(cmd); } @@ -168,6 +168,9 @@ f2b_cmd_parse(f2b_cmd_t *cmd, const char *src) { while (isblank(*src)) src++; + if (strlen(src) == 0) + return false; /* empty string */ + f2b_buf_alloc(&cmd->data, strlen(src) + 1); f2b_buf_append(&cmd->data, src, 0); @@ -234,6 +237,7 @@ f2b_cmd_parse(f2b_cmd_t *cmd, const char *src) { } } cmd->type = CMD_UNKNOWN; + memset(cmd->args, 0x0, sizeof(cmd->args)); f2b_buf_free(&cmd->data); return false; diff --git a/t/t_cmd.c b/t/t_cmd.c index 7194a89..0c540b4 100644 --- a/t/t_cmd.c +++ b/t/t_cmd.c @@ -4,6 +4,10 @@ int main() { f2b_cmd_t cmd; + f2b_cmd_t *c; + + assert(f2b_cmd_parse(&cmd, "") == false); + assert(f2b_cmd_parse(&cmd, " ") == false); assert(f2b_cmd_parse(&cmd, "status") == true); assert(cmd.type = CMD_STATUS); @@ -37,5 +41,19 @@ int main() { assert(strcmp(cmd.args[4], "7200") == 0); f2b_buf_free(&cmd.data); + c = f2b_cmd_create(""); + assert(c == NULL); + c = f2b_cmd_create(" "); + assert(c == NULL); + c = f2b_cmd_create("\n\r\n"); + assert(c == NULL); + c = f2b_cmd_create("test"); + assert(c == NULL); /* no such command */ + c = f2b_cmd_create("help"); + assert(c != NULL); + f2b_cmd_destroy(c); + + f2b_buf_free(&cmd.data); + return EXIT_SUCCESS; }