diff --git a/apache2/msc_pcre.c b/apache2/msc_pcre.c index 8534a20914..989a7f7ead 100644 --- a/apache2/msc_pcre.c +++ b/apache2/msc_pcre.c @@ -21,11 +21,7 @@ static apr_status_t msc_pcre_cleanup(msc_regex_t *regex) { if (regex != NULL) { if (regex->pe != NULL) { -#if defined(VERSION_NGINX) - pcre_free(regex->pe); -#else - free(regex->pe); -#endif + pcre_free_study(regex->pe); regex->pe = NULL; } if (regex->re != NULL) { @@ -67,19 +63,15 @@ void *msc_pregcomp_ex(apr_pool_t *pool, const char *pattern, int options, #ifdef WITH_PCRE_STUDY #ifdef WITH_PCRE_JIT - pe = pcre_study(regex->re, PCRE_STUDY_JIT_COMPILE, &errptr); + pe = pcre_study(regex->re, PCRE_STUDY_EXTRA_NEEDED|PCRE_STUDY_JIT_COMPILE, &errptr); #else - pe = pcre_study(regex->re, 0, &errptr); + pe = pcre_study(regex->re, PCRE_STUDY_EXTRA_NEEDED, &errptr); #endif #endif /* Setup the pcre_extra record if pcre_study did not already do it */ if (pe == NULL) { -#if defined(VERSION_NGINX) pe = pcre_malloc(sizeof(pcre_extra)); -#else - pe = malloc(sizeof(pcre_extra)); -#endif if (pe == NULL) { return NULL; } diff --git a/apache2/re_operators.c b/apache2/re_operators.c index b639ae4f6e..a5ccbe589e 100644 --- a/apache2/re_operators.c +++ b/apache2/re_operators.c @@ -1018,7 +1018,7 @@ static int msre_op_rx_execute(modsec_rec *msr, msre_rule *rule, msre_var *var, c msr_log(msr, 6, "Escaping pattern [%s]",pattern); } - regex = msc_pregcomp_ex(rule->ruleset->mp, pattern, PCRE_DOTALL | PCRE_DOLLAR_ENDONLY, &errptr, &erroffset, msc_pcre_match_limit, msc_pcre_match_limit_recursion); + regex = msc_pregcomp_ex(msr->mp, pattern, PCRE_DOTALL | PCRE_DOLLAR_ENDONLY, &errptr, &erroffset, msc_pcre_match_limit, msc_pcre_match_limit_recursion); if (regex == NULL) { *error_msg = apr_psprintf(rule->ruleset->mp, "Error compiling pattern (offset %d): %s", erroffset, errptr);