TAILQ_REMOVE(&dcerpc->dcerpcbindbindack.accepted_uuid_list, item, next);
SCFree(item);
}
- TAILQ_INIT(&dcerpc->dcerpcbindbindack.accepted_uuid_list);
}
dcerpc->dcerpcbindbindack.uuid_internal_id = 0;
dcerpc->dcerpcbindbindack.numctxitems = *(p + 8);
dcerpc->dcerpcbindbindack.numctxitemsleft = dcerpc->dcerpcbindbindack.numctxitems;
- TAILQ_INIT(&dcerpc->dcerpcbindbindack.uuid_list);
dcerpc->bytesprocessed += 12;
SCReturnUInt(12U);
} else {
TAILQ_REMOVE(&dcerpc->dcerpcbindbindack.accepted_uuid_list, item, next);
SCFree(item);
}
- TAILQ_INIT(&dcerpc->dcerpcbindbindack.accepted_uuid_list);
}
dcerpc->dcerpcbindbindack.uuid_internal_id = 0;
dcerpc->dcerpcbindbindack.numctxitems = *(p++);
dcerpc->dcerpcbindbindack.numctxitemsleft = dcerpc->dcerpcbindbindack.numctxitems;
- TAILQ_INIT(&dcerpc->dcerpcbindbindack.uuid_list);
if (!(--input_len))
break;
/* fall through */
local_data, 1);
}
+void DCERPCInit(DCERPC *dcerpc)
+{
+ dcerpc->transaction_id = 1;
+
+ TAILQ_INIT(&dcerpc->dcerpcbindbindack.uuid_list);
+ TAILQ_INIT(&dcerpc->dcerpcbindbindack.accepted_uuid_list);
+}
+
static void *DCERPCStateAlloc(void)
{
SCEnter();
- DCERPCState *s = SCMalloc(sizeof(DCERPCState));
+ DCERPCState *s = SCCalloc(1, sizeof(DCERPCState));
if (unlikely(s == NULL)) {
SCReturnPtr(NULL, "void");
}
- memset(s, 0, sizeof(DCERPCState));
- s->dcerpc.transaction_id = 1;
+ DCERPCInit(&s->dcerpc);
SCReturnPtr((void *)s, "void");
}
-static void DCERPCStateFree(void *s)
+void DCERPCCleanup(DCERPC *dcerpc)
{
- DCERPCState *sstate = (DCERPCState *) s;
-
- DCERPCUuidEntry *item;
+ DCERPCUuidEntry *entry;
- while ((item = TAILQ_FIRST(&sstate->dcerpc.dcerpcbindbindack.uuid_list))) {
- //printUUID("Free", item);
- TAILQ_REMOVE(&sstate->dcerpc.dcerpcbindbindack.uuid_list, item, next);
- SCFree(item);
+ while ((entry = TAILQ_FIRST(&dcerpc->dcerpcbindbindack.uuid_list))) {
+ TAILQ_REMOVE(&dcerpc->dcerpcbindbindack.uuid_list, entry, next);
+ SCFree(entry);
}
- while ((item = TAILQ_FIRST(&sstate->dcerpc.dcerpcbindbindack.accepted_uuid_list))) {
- //printUUID("Free", item);
- TAILQ_REMOVE(&sstate->dcerpc.dcerpcbindbindack.accepted_uuid_list, item, next);
- SCFree(item);
+ while ((entry = TAILQ_FIRST(&dcerpc->dcerpcbindbindack.accepted_uuid_list))) {
+ TAILQ_REMOVE(&dcerpc->dcerpcbindbindack.accepted_uuid_list, entry, next);
+ SCFree(entry);
}
- if (sstate->dcerpc.dcerpcrequest.stub_data_buffer != NULL) {
- SCFree(sstate->dcerpc.dcerpcrequest.stub_data_buffer);
- sstate->dcerpc.dcerpcrequest.stub_data_buffer = NULL;
- sstate->dcerpc.dcerpcrequest.stub_data_buffer_len = 0;
+ if (dcerpc->dcerpcrequest.stub_data_buffer != NULL) {
+ SCFree(dcerpc->dcerpcrequest.stub_data_buffer);
+ dcerpc->dcerpcrequest.stub_data_buffer = NULL;
+ dcerpc->dcerpcrequest.stub_data_buffer_len = 0;
}
- if (sstate->dcerpc.dcerpcresponse.stub_data_buffer != NULL) {
- SCFree(sstate->dcerpc.dcerpcresponse.stub_data_buffer);
- sstate->dcerpc.dcerpcresponse.stub_data_buffer = NULL;
- sstate->dcerpc.dcerpcresponse.stub_data_buffer_len = 0;
+ if (dcerpc->dcerpcresponse.stub_data_buffer != NULL) {
+ SCFree(dcerpc->dcerpcresponse.stub_data_buffer);
+ dcerpc->dcerpcresponse.stub_data_buffer = NULL;
+ dcerpc->dcerpcresponse.stub_data_buffer_len = 0;
}
+}
+
+static void DCERPCStateFree(void *s)
+{
+ DCERPCState *sstate = (DCERPCState *) s;
+
+ DCERPCCleanup(&sstate->dcerpc);
SCFree(s);
}
#include "app-layer-detect-proto.h"
#include "app-layer-protos.h"
#include "app-layer-parser.h"
+#include "app-layer-dcerpc.h"
#include "util-spm.h"
#include "util-unittest.h"
{
SCEnter();
- void *s = SCMalloc(sizeof(SMBState));
+ SMBState *s = (SMBState *)SCCalloc(1, sizeof(SMBState));
if (unlikely(s == NULL)) {
SCReturnPtr(NULL, "void");
}
- memset(s, 0, sizeof(SMBState));
+ DCERPCInit(&s->dcerpc);
SCReturnPtr(s, "void");
}
SCEnter();
SMBState *sstate = (SMBState *) s;
- DCERPCUuidEntry *item;
-
- while ((item = TAILQ_FIRST(&sstate->dcerpc.dcerpcbindbindack.uuid_list))) {
- //printUUID("Free", item);
- TAILQ_REMOVE(&sstate->dcerpc.dcerpcbindbindack.uuid_list, item, next);
- SCFree(item);
- }
- if (sstate->dcerpc.dcerpcrequest.stub_data_buffer != NULL) {
- SCFree(sstate->dcerpc.dcerpcrequest.stub_data_buffer);
- sstate->dcerpc.dcerpcrequest.stub_data_buffer = NULL;
- sstate->dcerpc.dcerpcrequest.stub_data_buffer_len = 0;
- }
- if (sstate->dcerpc.dcerpcresponse.stub_data_buffer != NULL) {
- SCFree(sstate->dcerpc.dcerpcresponse.stub_data_buffer);
- sstate->dcerpc.dcerpcresponse.stub_data_buffer = NULL;
- sstate->dcerpc.dcerpcresponse.stub_data_buffer_len = 0;
- }
+ DCERPCCleanup(&sstate->dcerpc);
SCFree(s);
SCReturn;