diff --git a/src/app-layer-htp.c b/src/app-layer-htp.c index 965e2babce..cadb5ce1be 100644 --- a/src/app-layer-htp.c +++ b/src/app-layer-htp.c @@ -4735,19 +4735,19 @@ libhtp:\n\ /** \test BG box crash -- chunks are messed up. Observed for real. */ static int HTPBodyReassemblyTest01(void) { - HtpTxUserData htud; - memset(&htud, 0x00, sizeof(htud)); + HtpTxUserData *htud = HTPCalloc(1, sizeof(*htud)); + FAIL_IF_NULL(htud); HtpState hstate; memset(&hstate, 0x00, sizeof(hstate)); Flow flow; memset(&flow, 0x00, sizeof(flow)); AppLayerParserState *parser = AppLayerParserStateAlloc(); htp_cfg_t *cfg = htp_config_create(); - BUG_ON(cfg == NULL); + FAIL_IF(cfg == NULL); htp_connp_t *connp = htp_connp_create(cfg); - BUG_ON(connp == NULL); + FAIL_IF(connp == NULL); const htp_tx_t *tx = htp_connp_get_request_tx(connp); - BUG_ON(tx == NULL); + FAIL_IF(tx == NULL); hstate.f = &flow; flow.alparser = parser; @@ -4755,15 +4755,15 @@ static int HTPBodyReassemblyTest01(void) uint8_t chunk1[] = "--e5a320f21416a02493a0a6f561b1c494\r\nContent-Disposition: form-data; name=\"uploadfile\"; filename=\"D2GUef.jpg\"\r"; uint8_t chunk2[] = "POST /uri HTTP/1.1\r\nHost: hostname.com\r\nKeep-Alive: 115\r\nAccept-Charset: utf-8\r\nUser-Agent: Mozilla/5.0 (X11; Linux i686; rv:9.0.1) Gecko/20100101 Firefox/9.0.1\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nConnection: keep-alive\r\nContent-length: 68102\r\nReferer: http://otherhost.com\r\nAccept-Encoding: gzip\r\nContent-Type: multipart/form-data; boundary=e5a320f21416a02493a0a6f561b1c494\r\nCookie: blah\r\nAccept-Language: us\r\n\r\n--e5a320f21416a02493a0a6f561b1c494\r\nContent-Disposition: form-data; name=\"uploadfile\"; filename=\"D2GUef.jpg\"\r"; - int r = HtpBodyAppendChunk(&htud.request_body, chunk1, sizeof(chunk1) - 1); - BUG_ON(r != 0); - r = HtpBodyAppendChunk(&htud.request_body, chunk2, sizeof(chunk2) - 1); - BUG_ON(r != 0); + int r = HtpBodyAppendChunk(&htud->request_body, chunk1, sizeof(chunk1) - 1); + FAIL_IF(r != 0); + r = HtpBodyAppendChunk(&htud->request_body, chunk2, sizeof(chunk2) - 1); + FAIL_IF(r != 0); const uint8_t *chunks_buffer = NULL; uint32_t chunks_buffer_len = 0; - HtpRequestBodyReassemble(&htud, &chunks_buffer, &chunks_buffer_len); + HtpRequestBodyReassemble(htud, &chunks_buffer, &chunks_buffer_len); FAIL_IF_NULL(chunks_buffer); #ifdef PRINT printf("REASSCHUNK START: \n"); @@ -4771,16 +4771,20 @@ static int HTPBodyReassemblyTest01(void) printf("REASSCHUNK END: \n"); #endif - htud.mime_state = SCMimeStateInit((const uint8_t *)"multipart/form-data; boundary=toto", + htud->mime_state = SCMimeStateInit((const uint8_t *)"multipart/form-data; boundary=toto", strlen("multipart/form-data; boundary=toto")); - FAIL_IF_NULL(htud.mime_state); - htud.tsflags |= HTP_BOUNDARY_SET; - HtpRequestBodyHandleMultipart(&hstate, &htud, &tx, chunks_buffer, chunks_buffer_len, false); + FAIL_IF_NULL(htud->mime_state); + htud->tsflags |= HTP_BOUNDARY_SET; + HtpRequestBodyHandleMultipart(&hstate, htud, &tx, chunks_buffer, chunks_buffer_len, false); - FAIL_IF(htud.request_body.content_len_so_far != 669); + FAIL_IF(htud->request_body.content_len_so_far != 669); - FAIL_IF_NOT_NULL(htud.files_ts.head); + FAIL_IF_NOT_NULL(htud->files_ts.head); + htp_connp_destroy_all(connp); + HtpTxUserDataFree(htud); + AppLayerParserStateFree(parser); + htp_config_destroy(cfg); PASS; }