From: Victor Julien Date: Tue, 28 Jun 2022 05:46:54 +0000 (+0200) Subject: mime: fix and cleanup tests X-Git-Tag: suricata-5.0.10~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bcae2ee4a8207156cf2d77b53aa5b32280610f9;p=thirdparty%2Fsuricata.git mime: fix and cleanup tests Line count check was failing after recent delim handling updates. (cherry picked from commit 074cfb5c68e76642f35f78c10e56761eb8010f5f) --- diff --git a/src/util-decode-mime.c b/src/util-decode-mime.c index 457e3e9da0..ca13ed2d75 100644 --- a/src/util-decode-mime.c +++ b/src/util-decode-mime.c @@ -2849,73 +2849,52 @@ static int TestDataChunkCallback(const uint8_t *chunk, uint32_t len, /* Test simple case of line counts */ static int MimeDecParseLineTest01(void) { - int ret = MIME_DEC_OK; - - uint32_t expected_count = 3; uint32_t line_count = 0; /* Init parser */ MimeDecParseState *state = MimeDecInitParser(&line_count, TestDataChunkCallback); - const char *str = "From: Sender1"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + const char *str = "From: Sender1\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 1, 1, state) == MIME_DEC_OK); - str = "To: Recipient1"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "To: Recipient1\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 1, 1, state) == MIME_DEC_OK); - str = "Content-Type: text/plain"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "Content-Type: text/plain\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 1, 1, state) == MIME_DEC_OK); - str = ""; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 1, 1, state) == MIME_DEC_OK); - str = "A simple message line 1"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "A simple message line 1\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 1, 1, state) == MIME_DEC_OK); - str = "A simple message line 2"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "A simple message line 2\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 1, 1, state) == MIME_DEC_OK); - str = "A simple message line 3"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "A simple message line 3\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 1, 1, state) == MIME_DEC_OK); - if (ret != MIME_DEC_OK) { - return 0; - } /* Completed */ - ret = MimeDecParseComplete(state); - if (ret != MIME_DEC_OK) { - return 0; - } + FAIL_IF_NOT(MimeDecParseComplete(state) == MIME_DEC_OK); MimeDecEntity *msg = state->msg; - if (msg->next != NULL || msg->child != NULL) { - SCLogInfo("Error: Invalid sibling or child message"); - return 0; - } + FAIL_IF_NOT_NULL(msg->next); + FAIL_IF_NOT_NULL(msg->child); MimeDecFreeEntity(msg); /* De Init parser */ MimeDecDeInitParser(state); - SCLogInfo("LINE COUNT FINISHED: %d", line_count); - - if (expected_count != line_count) { - SCLogInfo("Error: Line count is invalid: expected - %d actual - %d", - expected_count, line_count); - return 0; - } - - return 1; + FAIL_IF_NOT(line_count == 3); + PASS; } /* Test simple case of EXE URL extraction */ static int MimeDecParseLineTest02(void) { - int ret = MIME_DEC_OK; - - uint32_t expected_count = 2; uint32_t line_count = 0; MimeDecGetConfig()->decode_base64 = 1; @@ -2926,55 +2905,39 @@ static int MimeDecParseLineTest02(void) MimeDecParseState *state = MimeDecInitParser(&line_count, TestDataChunkCallback); - const char *str = "From: Sender1"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + const char *str = "From: Sender1\r\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 2, 2, state) == MIME_DEC_OK); - str = "To: Recipient1"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "To: Recipient1\r\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 2, 2, state) == MIME_DEC_OK); - str = "Content-Type: text/plain"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "Content-Type: text/plain\r\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 2, 2, state) == MIME_DEC_OK); - str = ""; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "\r\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 2, 2, state) == MIME_DEC_OK); - str = "A simple message line 1"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + str = "A simple message line 1\r\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 2, 2, state) == MIME_DEC_OK); str = "A simple message line 2 click on http://www.test.com/malware.exe?" - "hahah hopefully you click this link"; - ret |= MimeDecParseLine((uint8_t *)str, strlen(str), 1, state); + "hahah hopefully you click this link\r\n"; + FAIL_IF_NOT(MimeDecParseLine((uint8_t *)str, strlen(str) - 2, 2, state) == MIME_DEC_OK); - if (ret != MIME_DEC_OK) { - return 0; - } /* Completed */ - ret = MimeDecParseComplete(state); - if (ret != MIME_DEC_OK) { - return 0; - } + FAIL_IF_NOT(MimeDecParseComplete(state) == MIME_DEC_OK); MimeDecEntity *msg = state->msg; - if (msg->url_list == NULL || (msg->url_list != NULL && - !(msg->url_list->url_flags & URL_IS_EXE))) { - SCLogInfo("Warning: Expected EXE URL not found"); - return 0; - } - + FAIL_IF_NULL(msg); + FAIL_IF_NULL(msg->url_list); + FAIL_IF_NOT((msg->url_list->url_flags & URL_IS_EXE)); MimeDecFreeEntity(msg); /* De Init parser */ MimeDecDeInitParser(state); - SCLogInfo("LINE COUNT FINISHED: %d", line_count); - - if (expected_count != line_count) { - SCLogInfo("Warning: Line count is invalid: expected - %d actual - %d", - expected_count, line_count); - return 0; - } - - return 1; + FAIL_IF_NOT(line_count == 2); + PASS; } /* Test full message with linebreaks */