diff --git a/CHANGES b/CHANGES index eb1b846c..80d8520c 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ DD mmm YYYY - 2.9.x (to be released) ------------------- + * Enhance logging + [Issue #3107 - @marcstern] * Fix possible segfault in collection_unpack [Issue #3072 - @twouters] * Set the minimum security protocol version for SecRemoteRules diff --git a/apache2/msc_json.c b/apache2/msc_json.c index 4cbeebf5..f57d7802 100644 --- a/apache2/msc_json.c +++ b/apache2/msc_json.c @@ -65,6 +65,7 @@ int json_add_argument(modsec_rec *msr, const char *value, unsigned length) log_escape_ex(msr->mp, arg->value, arg->value_len)); } msr->msc_reqbody_error = 1; + msr->json->yajl_error = apr_psprintf(msr->mp, "More than %ld JSON keys", msr->txcfg->arguments_limit); return 0; } @@ -374,9 +375,12 @@ 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 { - 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); + if (msr->json->yajl_error) *error_msg = msr->json->yajl_error; + else { + 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; }