Fix memory leak that occurs on JSON parsing error by vkrivopalov · Pull Request #2236 · owasp-modsecurity/ModSecurity (original) (raw)

This PR cannot get merged since release v2.9.5.

This is my suggested rebase:

diff --git a/apache2/msc_json.c b/apache2/msc_json.c
index d69e9eb7..7d76dc05 100644
--- a/apache2/msc_json.c
+++ b/apache2/msc_json.c
@@ -355,7 +355,9 @@ int json_process_chunk(modsec_rec *msr, const char *buf, unsigned int size, char
        if (msr->json->depth_limit_exceeded) {
            *error_msg = "JSON depth limit exceeded";
        } else {
-           *error_msg = yajl_get_error(msr->json->handle, 0, NULL, 0);
+           char *yajl_err = yajl_get_error(msr->json->handle, 0, buf, size);
+           *error_msg = apr_pstrdup(msr->mp, yajl_err);
+           yajl_free_error(msr->json->handle, yajl_err);
        }
         return -1;
     }
@@ -379,7 +381,9 @@ int json_complete(modsec_rec *msr, char **error_msg) {
        if (msr->json->depth_limit_exceeded) {
            *error_msg = "JSON depth limit exceeded";
        } else {
-           *error_msg = yajl_get_error(msr->json->handle, 0, NULL, 0);
+           char *yajl_err = yajl_get_error(msr->json->handle, 0, NULL, 0);
+           *error_msg = apr_pstrdup(msr->mp, yajl_err);
+           yajl_free_error(msr->json->handle, yajl_err);
        }
 
         return -1;

What do you think @argenet ?