Fixup some rule parser memleaks

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

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

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

@ -38,12 +38,13 @@ static pcre_extra *parse_regex_study;
int DetectFlowbitMatch (ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *); int DetectFlowbitMatch (ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *);
int DetectFlowbitSetup (DetectEngineCtx *, Signature *, SigMatch *, char *); int DetectFlowbitSetup (DetectEngineCtx *, Signature *, SigMatch *, char *);
void DetectFlowbitFree (void *);
void DetectFlowbitsRegister (void) { void DetectFlowbitsRegister (void) {
sigmatch_table[DETECT_FLOWBITS].name = "flowbits"; sigmatch_table[DETECT_FLOWBITS].name = "flowbits";
sigmatch_table[DETECT_FLOWBITS].Match = DetectFlowbitMatch; sigmatch_table[DETECT_FLOWBITS].Match = DetectFlowbitMatch;
sigmatch_table[DETECT_FLOWBITS].Setup = DetectFlowbitSetup; sigmatch_table[DETECT_FLOWBITS].Setup = DetectFlowbitSetup;
sigmatch_table[DETECT_FLOWBITS].Free = NULL; sigmatch_table[DETECT_FLOWBITS].Free = DetectFlowbitFree;
sigmatch_table[DETECT_FLOWBITS].RegisterTests = NULL; sigmatch_table[DETECT_FLOWBITS].RegisterTests = NULL;
const char *eb; const char *eb;
@ -209,4 +210,12 @@ error:
return -1; 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 DetectPcreMatch (ThreadVars *, PatternMatcherThread *, Packet *, Signature *, SigMatch *);
int DetectPcreSetup (DetectEngineCtx *, Signature *, SigMatch *, char *); int DetectPcreSetup (DetectEngineCtx *, Signature *, SigMatch *, char *);
int DetectPcreFree(SigMatch *); void DetectPcreFree(void *);
void DetectPcreRegister (void) { void DetectPcreRegister (void) {
sigmatch_table[DETECT_PCRE].name = "pcre"; sigmatch_table[DETECT_PCRE].name = "pcre";
@ -351,14 +351,14 @@ error:
return -1; return -1;
} }
int DetectPcreFree(SigMatch *sm) { void DetectPcreFree(void *ptr) {
DetectPcreData *pd = (DetectPcreData *)sm->ctx; DetectPcreData *pd = (DetectPcreData *)ptr;
if (pd->capname != NULL) free(pd->capname); if (pd->capname != NULL) free(pd->capname);
if (pd->re != NULL) pcre_free(pd->re); if (pd->re != NULL) pcre_free(pd->re);
if (pd->sd != NULL) pcre_free(pd->sd); if (pd->sd != NULL) pcre_free(pd->sd);
free(sm->ctx); free(pd);
return 0; return;
} }

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

Loading…
Cancel
Save