From: Vsevolod Stakhov Date: Wed, 9 Oct 2019 12:25:08 +0000 (+0100) Subject: [Fix] Set sanity limits for pcre2 X-Git-Tag: 2.0~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9791674f7f656703af74e45949f445c7b30c90d2;p=thirdparty%2Frspamd.git [Fix] Set sanity limits for pcre2 --- diff --git a/src/libutil/regexp.c b/src/libutil/regexp.c index 4ce9c4218a..b7aae457e7 100644 --- a/src/libutil/regexp.c +++ b/src/libutil/regexp.c @@ -158,13 +158,21 @@ rspamd_regexp_post_process (rspamd_regexp_t *r) } #if defined(WITH_PCRE2) gsize jsz; + static const guint max_recursion_depth = 100000, max_backtrack = 1000000; + guint jit_flags = can_jit ? PCRE2_JIT_COMPLETE : 0; - /* Create match context */ + /* Create match context */ r->mcontext = pcre2_match_context_create (NULL); + g_assert (r->mcontext != NULL); + pcre2_set_depth_limit (r->mcontext, max_recursion_depth); + pcre2_set_match_limit (r->mcontext, max_backtrack); if (r->re != r->raw_re) { r->raw_mcontext = pcre2_match_context_create (NULL); + g_assert (r->raw_mcontext != NULL); + pcre2_set_depth_limit (r->raw_mcontext, max_recursion_depth); + pcre2_set_match_limit (r->raw_mcontext, max_backtrack); } else { r->raw_mcontext = r->mcontext;