Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

next/622/20241101/v1 #12074

Merged
merged 2 commits into from
Nov 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 0 additions & 160 deletions src/app-layer-parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -1768,60 +1768,6 @@ uint16_t AppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag
#ifdef UNITTESTS
#include "util-unittest-helper.h"

static AppLayerParserCtx alp_ctx_backup_unittest;

typedef struct TestState_ {
uint8_t test;
} TestState;

/**
* \brief Test parser function to test the memory deallocation of app layer
* parser of occurrence of an error.
*/
static AppLayerResult TestProtocolParser(Flow *f, void *test_state, AppLayerParserState *pstate,
StreamSlice stream_slice, void *local_data)
{
SCEnter();
SCReturnStruct(APP_LAYER_ERROR);
}

/** \brief Function to allocates the Test protocol state memory
*/
static void *TestProtocolStateAlloc(void *orig_state, AppProto proto_orig)
{
SCEnter();
void *s = SCMalloc(sizeof(TestState));
if (unlikely(s == NULL))
goto end;
memset(s, 0, sizeof(TestState));
end:
SCReturnPtr(s, "TestState");
}

/** \brief Function to free the Test Protocol state memory
*/
static void TestProtocolStateFree(void *s)
{
SCFree(s);
}

static uint64_t TestGetTxCnt(void *state)
{
/* single tx */
return 1;
}

static void TestStateTransactionFree(void *state, uint64_t tx_id)
{
/* do nothing */
}

static void *TestGetTx(void *state, uint64_t tx_id)
{
TestState *test_state = (TestState *)state;
return test_state;
}

void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto,
void (*RegisterUnittests)(void))
{
Expand All @@ -1831,109 +1777,6 @@ void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto,
SCReturn;
}

void AppLayerParserBackupParserTable(void)
{
SCEnter();
alp_ctx_backup_unittest = alp_ctx;
memset(&alp_ctx, 0, sizeof(alp_ctx));
SCReturn;
}

void AppLayerParserRestoreParserTable(void)
{
SCEnter();
alp_ctx = alp_ctx_backup_unittest;
memset(&alp_ctx_backup_unittest, 0, sizeof(alp_ctx_backup_unittest));
SCReturn;
}

/**
* \test Test the deallocation of app layer parser memory on occurrence of
* error in the parsing process.
*/
static int AppLayerParserTest01(void)
{
AppLayerParserBackupParserTable();

Flow *f = NULL;
uint8_t testbuf[] = { 0x11 };
uint32_t testlen = sizeof(testbuf);
TcpSession ssn;
AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();

memset(&ssn, 0, sizeof(ssn));

/* Register the Test protocol state and parser functions */
AppLayerParserRegisterParser(IPPROTO_TCP, ALPROTO_TEST, STREAM_TOSERVER, TestProtocolParser);
AppLayerParserRegisterStateFuncs(IPPROTO_TCP, ALPROTO_TEST,
TestProtocolStateAlloc, TestProtocolStateFree);
AppLayerParserRegisterTxFreeFunc(IPPROTO_TCP, ALPROTO_TEST, TestStateTransactionFree);
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_TEST, TestGetTx);
AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_TEST, TestGetTxCnt);

f = UTHBuildFlow(AF_INET, "1.2.3.4", "4.3.2.1", 20, 40);
FAIL_IF_NULL(f);
f->protoctx = &ssn;
f->alproto = ALPROTO_TEST;
f->proto = IPPROTO_TCP;

StreamTcpInitConfig(true);

int r = AppLayerParserParse(NULL, alp_tctx, f, ALPROTO_TEST,
STREAM_TOSERVER | STREAM_EOF, testbuf,
testlen);
FAIL_IF(r != -1);

FAIL_IF(!(ssn.flags & STREAMTCP_FLAG_APP_LAYER_DISABLED));

AppLayerParserRestoreParserTable();
StreamTcpFreeConfig(true);
UTHFreeFlow(f);
PASS;
}

/**
* \test Test the deallocation of app layer parser memory on occurrence of
* error in the parsing process for UDP.
*/
static int AppLayerParserTest02(void)
{
AppLayerParserBackupParserTable();

Flow *f = NULL;
uint8_t testbuf[] = { 0x11 };
uint32_t testlen = sizeof(testbuf);
AppLayerParserThreadCtx *alp_tctx = AppLayerParserThreadCtxAlloc();

/* Register the Test protocol state and parser functions */
AppLayerParserRegisterParser(IPPROTO_UDP, ALPROTO_TEST, STREAM_TOSERVER,
TestProtocolParser);
AppLayerParserRegisterStateFuncs(IPPROTO_UDP, ALPROTO_TEST,
TestProtocolStateAlloc, TestProtocolStateFree);
AppLayerParserRegisterTxFreeFunc(IPPROTO_UDP, ALPROTO_TEST, TestStateTransactionFree);
AppLayerParserRegisterGetTx(IPPROTO_UDP, ALPROTO_TEST, TestGetTx);
AppLayerParserRegisterGetTxCnt(IPPROTO_UDP, ALPROTO_TEST, TestGetTxCnt);

f = UTHBuildFlow(AF_INET, "1.2.3.4", "4.3.2.1", 20, 40);
FAIL_IF_NULL(f);
f->alproto = ALPROTO_TEST;
f->proto = IPPROTO_UDP;
f->protomap = FlowGetProtoMapping(f->proto);

StreamTcpInitConfig(true);

int r = AppLayerParserParse(NULL, alp_tctx, f, ALPROTO_TEST,
STREAM_TOSERVER | STREAM_EOF, testbuf,
testlen);
FAIL_IF(r != -1);

AppLayerParserRestoreParserTable();
StreamTcpFreeConfig(true);
UTHFreeFlow(f);
PASS;
}


void AppLayerParserRegisterUnittests(void)
{
SCEnter();
Expand All @@ -1951,9 +1794,6 @@ void AppLayerParserRegisterUnittests(void)
}
}

UtRegisterTest("AppLayerParserTest01", AppLayerParserTest01);
UtRegisterTest("AppLayerParserTest02", AppLayerParserTest02);

SCReturn;
}

Expand Down
2 changes: 0 additions & 2 deletions src/app-layer-parser.h
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,6 @@ void AppLayerParserTransactionsCleanup(Flow *f, const uint8_t pkt_dir);
void AppLayerParserRegisterProtocolUnittests(uint8_t ipproto, AppProto alproto,
void (*RegisterUnittests)(void));
void AppLayerParserRegisterUnittests(void);
void AppLayerParserBackupParserTable(void);
void AppLayerParserRestoreParserTable(void);
void UTHAppLayerParserStateGetIds(void *ptr, uint64_t *i1, uint64_t *i2, uint64_t *log, uint64_t *min);
#endif

Expand Down
3 changes: 0 additions & 3 deletions src/app-layer-protos.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,6 @@ const AppProtoStringTuple AppProtoStrings[ALPROTO_MAX] = {
{ ALPROTO_POP3, "pop3" },
{ ALPROTO_HTTP, "http" },
{ ALPROTO_FAILED, "failed" },
#ifdef UNITTESTS
{ ALPROTO_TEST, "test" },
#endif
};

const char *AppProtoToString(AppProto alproto)
Expand Down
3 changes: 0 additions & 3 deletions src/app-layer-protos.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,6 @@ enum AppProtoEnum {
/* used by the probing parser when alproto detection fails
* permanently for that particular stream */
ALPROTO_FAILED,
#ifdef UNITTESTS
ALPROTO_TEST,
#endif /* UNITESTS */
/* keep last */
ALPROTO_MAX,
};
Expand Down
8 changes: 5 additions & 3 deletions src/output-json.c
Original file line number Diff line number Diff line change
Expand Up @@ -1050,9 +1050,11 @@ static int LogFileTypePrepare(
&json_ctx->file_ctx->filetype.init_data) < 0) {
return -1;
}
if (json_ctx->filetype->ThreadInit(json_ctx->file_ctx->filetype.init_data, 0,
&json_ctx->file_ctx->filetype.thread_data) < 0) {
return -1;
if (json_ctx->filetype->ThreadInit) {
if (json_ctx->filetype->ThreadInit(json_ctx->file_ctx->filetype.init_data, 0,
&json_ctx->file_ctx->filetype.thread_data) < 0) {
return -1;
}
}
json_ctx->file_ctx->filetype.filetype = json_ctx->filetype;
}
Expand Down
2 changes: 1 addition & 1 deletion src/util-logopenfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -871,7 +871,7 @@ int LogFileFreeCtx(LogFileCtx *lf_ctx)
SCReturnInt(0);
}

if (lf_ctx->type == LOGFILE_TYPE_FILETYPE) {
if (lf_ctx->type == LOGFILE_TYPE_FILETYPE && lf_ctx->filetype.filetype->ThreadDeinit) {
lf_ctx->filetype.filetype->ThreadDeinit(
lf_ctx->filetype.init_data, lf_ctx->filetype.thread_data);
}
Expand Down
Loading