From 6a5ec1ff7bd5a4a653da417f9a49a50cf5b2429d Mon Sep 17 00:00:00 2001
From: Vladimir Krivopalov <vlkrivop@microsoft.com>
Date: Mon, 13 Jan 2020 16:36:09 -0800
Subject: [PATCH] Properly cleanup XML parser contexts upon completion

It is currently possible that the XML parsing context is not properly
cleaned up if a parsed XML document is malformed.

This fix makes sure that the context is taken care of.

Signed-off-by: Vladimir Krivopalov <vlkrivop@microsoft.com>
---
 apache2/msc_xml.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/apache2/msc_xml.c b/apache2/msc_xml.c
index a31decb5..9cc4da65 100644
--- a/apache2/msc_xml.c
+++ b/apache2/msc_xml.c
@@ -137,6 +137,13 @@ int xml_complete(modsec_rec *msr, char **error_msg) {
  * Frees the resources used for XML parsing.
  */
 apr_status_t xml_cleanup(modsec_rec *msr) {
+    if (msr->xml->parsing_ctx != NULL) {
+        if (msr->xml->parsing_ctx->myDoc) {
+            xmlFreeDoc(msr->xml->parsing_ctx->myDoc);
+        }
+        xmlFreeParserCtxt(msr->xml->parsing_ctx);
+        msr->xml->parsing_ctx = NULL;
+    }
     if (msr->xml->doc != NULL) {
         xmlFreeDoc(msr->xml->doc);
         msr->xml->doc = NULL;
-- 
2.27.0

