Skip to content

Commit

Permalink
app-layer: remove ALPROTO_TEST and tests
Browse files Browse the repository at this point in the history
These tests purpose seems to have been lost.
Registering a alproto with a parser function that always fails,
and just testing that AppLayerParserParse returned -1...
We would get the same result  without registering a parser function,
or using ALPROTO_FAILED as argument to AppLayerParserParse

The comment says "Test the deallocation of app layer parser memory
on occurrence of error in the parsing process."
but I do not see how this is tested.
  • Loading branch information
catenacyber committed Oct 29, 2024
1 parent 3a7eef8 commit 292c218
Show file tree
Hide file tree
Showing 4 changed files with 0 additions and 168 deletions.
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

0 comments on commit 292c218

Please sign in to comment.