Fixup some rule parser memleaks

remotes/origin/master-1.0.x
Victor Julien 16 years ago
parent 25aa05fdb2
commit 97854cf4bb

@ -48,7 +48,7 @@
int DetectContentMatch (ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *);
int DetectContentSetup (DetectEngineCtx *, Signature *, SigMatch *, char *);
void DetectContentRegisterTests(void);
void DetectContentFree(DetectContentData *);
void DetectContentFree(void *);
uint8_t nocasetable[256];
#define _nc(c) nocasetable[(c)]
@ -57,7 +57,7 @@ void DetectContentRegister (void) {
sigmatch_table[DETECT_CONTENT].name = "content";
sigmatch_table[DETECT_CONTENT].Match = DetectContentMatch;
sigmatch_table[DETECT_CONTENT].Setup = DetectContentSetup;
sigmatch_table[DETECT_CONTENT].Free = NULL;
sigmatch_table[DETECT_CONTENT].Free = DetectContentFree;
sigmatch_table[DETECT_CONTENT].RegisterTests = DetectContentRegisterTests;
/* create table for O(1) case conversion lookup */
@ -440,7 +440,15 @@ error:
*
* \param cd pointer to DetectCotentData
*/
void DetectContentFree(DetectContentData *cd) {
void DetectContentFree(void *ptr) {
DetectContentData *cd = (DetectContentData *)ptr;
if (cd == NULL)
return;
if (cd->content != NULL)
free(cd->content);
free(cd);
}

@ -30,7 +30,7 @@ static pcre_extra *parse_regex_study;
int DetectFlowMatch (ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *);
int DetectFlowSetup (DetectEngineCtx *, Signature *, SigMatch *, char *);
void DetectFlowRegisterTests(void);
void DetectFlowFree(DetectFlowData *);
void DetectFlowFree(void *);
/**
* \brief Registration function for flow: keyword
@ -40,7 +40,7 @@ void DetectFlowRegister (void) {
sigmatch_table[DETECT_FLOW].name = "flow";
sigmatch_table[DETECT_FLOW].Match = DetectFlowMatch;
sigmatch_table[DETECT_FLOW].Setup = DetectFlowSetup;
sigmatch_table[DETECT_FLOW].Free = NULL;
sigmatch_table[DETECT_FLOW].Free = DetectFlowFree;
sigmatch_table[DETECT_FLOW].RegisterTests = DetectFlowRegisterTests;
const char *eb;
@ -291,7 +291,8 @@ error:
*
* \param fd pointer to DetectFlowData
*/
void DetectFlowFree(DetectFlowData *fd) {
void DetectFlowFree(void *ptr) {
DetectFlowData *fd = (DetectFlowData *)ptr;
free(fd);
}

@ -38,12 +38,13 @@ static pcre_extra *parse_regex_study;
int DetectFlowbitMatch (ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *);
int DetectFlowbitSetup (DetectEngineCtx *, Signature *, SigMatch *, char *);
void DetectFlowbitFree (void *);
void DetectFlowbitsRegister (void) {
sigmatch_table[DETECT_FLOWBITS].name = "flowbits";
sigmatch_table[DETECT_FLOWBITS].Match = DetectFlowbitMatch;
sigmatch_table[DETECT_FLOWBITS].Setup = DetectFlowbitSetup;
sigmatch_table[DETECT_FLOWBITS].Free = NULL;
sigmatch_table[DETECT_FLOWBITS].Free = DetectFlowbitFree;
sigmatch_table[DETECT_FLOWBITS].RegisterTests = NULL;
const char *eb;
@ -209,4 +210,12 @@ error:
return -1;
}
void DetectFlowbitFree (void *ptr) {
DetectFlowbitsData *fd = (DetectFlowbitsData *)ptr;
if (fd == NULL)
return;
free(fd);
}

@ -25,7 +25,7 @@ static pcre_extra *parse_capture_regex_study;
int DetectPcreMatch (ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *);
int DetectPcreSetup (DetectEngineCtx *, Signature *, SigMatch *, char *);
int DetectPcreFree(SigMatch *);
void DetectPcreFree(void *);
void DetectPcreRegister (void) {
sigmatch_table[DETECT_PCRE].name = "pcre";
@ -351,14 +351,14 @@ error:
return -1;
}
int DetectPcreFree(SigMatch *sm) {
DetectPcreData *pd = (DetectPcreData *)sm->ctx;
void DetectPcreFree(void *ptr) {
DetectPcreData *pd = (DetectPcreData *)ptr;
if (pd->capname != NULL) free(pd->capname);
if (pd->re != NULL) pcre_free(pd->re);
if (pd->sd != NULL) pcre_free(pd->sd);
free(sm->ctx);
return 0;
free(pd);
return;
}

@ -301,7 +301,7 @@ typedef struct SigMatch_ {
typedef struct SigTableElmt_ {
int (*Match)(ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *);
int (*Setup)(DetectEngineCtx *, Signature *, SigMatch *, char *);
int (*Free)(SigMatch *);
void (*Free)(void *);
void (*RegisterTests)(void);
uint8_t flags;

Loading…
Cancel
Save