diff --git a/src/modsecurity.cc b/src/modsecurity.cc index 46c70700..8e1da018 100644 --- a/src/modsecurity.cc +++ b/src/modsecurity.cc @@ -16,6 +16,9 @@ #include #include +#include +#include + #include "modsecurity/modsecurity.h" #include "modsecurity/rule.h" #include "modsecurity/rule_message.h" @@ -72,6 +75,7 @@ ModSecurity::ModSecurity() srand(time(NULL)); #ifdef MSC_WITH_CURL curl_global_init(CURL_GLOBAL_ALL); + xmlInitParser(); #endif } @@ -83,6 +87,8 @@ ModSecurity::~ModSecurity() { #ifdef WITH_GEOIP Utils::GeoLookup::getInstance().cleanUp(); #endif + xmlCleanupParser(); + delete m_global_collection; delete m_resource_collection; delete m_ip_collection; diff --git a/src/operators/validate_schema.cc b/src/operators/validate_schema.cc index 44063a65..8bf97bce 100644 --- a/src/operators/validate_schema.cc +++ b/src/operators/validate_schema.cc @@ -140,6 +140,8 @@ bool ValidateSchema::evaluate(Transaction *t, t->debug(4, "XML: Successfully validated payload against " \ "Schema: " + m_resource); #endif + xmlSchemaFree(m_schema); + xmlSchemaFreeParserCtxt(m_parserCtx); return false; } diff --git a/src/request_body_processor/xml.cc b/src/request_body_processor/xml.cc index 29c7241a..bca1a22e 100644 --- a/src/request_body_processor/xml.cc +++ b/src/request_body_processor/xml.cc @@ -33,6 +33,10 @@ XML::XML(Transaction *transaction) XML::~XML() { + if (m_data.parsing_ctx != NULL) { + xmlFreeParserCtxt(m_data.parsing_ctx); + m_data.parsing_ctx = NULL; + } if (m_data.doc != NULL) { xmlFreeDoc(m_data.doc); m_data.doc = NULL;