From b358e7fb6af71ec44bb24acc21a21955f2052ff1 Mon Sep 17 00:00:00 2001 From: Andrew Clayton Date: Tue, 24 Sep 2024 00:03:19 +0100 Subject: [PATCH 1/2] Resolve unused assignment in nxt_term_parse() Both clang-analyzer and coverity flagged an issue in nxt_term_parse() that we set 'state = st_letter' but then set it to 'state = st_space' before using it. While we could simply remove the first assignment and placate the analyzers, upon further analysis it seems that there is some more cleanup that could be done in this function. This commit addresses the above issue, subsequent commits will continue the cleanup. To solve the unused assignment issue we can get rid of the 'state == st_letter' assignment and unconditionally execute the code that was behind the if (state != st_letter) { guard. If we're not handling a space then we should have either a digit or letter. Also, perhaps more importantly, this if () statement would never be false at this point as state would never == st_letter. We may as well also remove the st_letter enum value. The src/test/nxt_term_parse_test.c still passes tests: [notice] term parse test passed NOTE: Although this function is not currently used in Unit (only by src/test/nxt_term_parse_test.c), it is probably worth cleaning it up and solving one of the open clang-analyzer (and coverity) issues. Signed-off-by: Andrew Clayton --- src/nxt_time_parse.c | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/src/nxt_time_parse.c b/src/nxt_time_parse.c index 63620b09b..1ac52fe4a 100644 --- a/src/nxt_time_parse.c +++ b/src/nxt_time_parse.c @@ -317,7 +317,6 @@ nxt_term_parse(const u_char *p, size_t len, nxt_bool_t seconds) enum { st_first_digit = 0, st_digit, - st_letter, st_space, } state; @@ -354,22 +353,17 @@ nxt_term_parse(const u_char *p, size_t len, nxt_bool_t seconds) state = st_first_digit; } - if (state != st_letter) { + /* Values below '0' become >= 208. */ + c = ch - '0'; - /* Values below '0' become >= 208. */ - c = ch - '0'; - - if (c <= 9) { - val = val * 10 + c; - state = st_digit; - continue; - } - - if (state == st_first_digit) { - return -1; - } + if (c <= 9) { + val = val * 10 + c; + state = st_digit; + continue; + } - state = st_letter; + if (state == st_first_digit) { + return -1; } switch (ch) { From a9d687e77059e801e956e7b7bb59637aa4708483 Mon Sep 17 00:00:00 2001 From: Andrew Clayton Date: Tue, 24 Sep 2024 14:55:04 +0100 Subject: [PATCH 2/2] src/test: Add an extra test case to nxt_term_parse_test.c The function nxt_term_parse() is able to take strings with trailing whitespace e.g. "1w1d ", add a test case to cover such things. Signed-off-by: Andrew Clayton --- src/test/nxt_term_parse_test.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/nxt_term_parse_test.c b/src/test/nxt_term_parse_test.c index 83ae49316..ceae3fe5b 100644 --- a/src/test/nxt_term_parse_test.c +++ b/src/test/nxt_term_parse_test.c @@ -23,6 +23,7 @@ static const nxt_term_parse_test_t terms[] = { { nxt_string("1w d"), 0, -1 }, { nxt_string("w"), 0, -1 }, { nxt_string("1d 1w"), 0, -1 }, + { nxt_string("1 "), 1, 1 }, { nxt_string("25d"), 0, -2 }, { nxt_string("300"), 1, 300 }, { nxt_string("300"), 0, 300000 },