Skip to content

Commit

Permalink
detect/parse: set limits for pcre2
Browse files Browse the repository at this point in the history
Ticket: 6889

To avoid regexp dos with too much backtracking.
This is already done on pcre keyword, and pcrexform transform.
We use the same default limits for rules parsing.

(cherry picked from commit 316cc52)
  • Loading branch information
catenacyber authored and victorjulien committed Apr 22, 2024
1 parent c0af922 commit bcc65a7
Showing 1 changed file with 10 additions and 2 deletions.
12 changes: 10 additions & 2 deletions src/detect-parse.c
Original file line number Diff line number Diff line change
Expand Up @@ -2701,7 +2701,7 @@ int DetectParsePcreExec(DetectParseRegex *parse_regex, pcre2_match_data **match,
*match = pcre2_match_data_create_from_pattern(parse_regex->regex, NULL);
if (*match)
return pcre2_match(parse_regex->regex, (PCRE2_SPTR8)str, strlen(str), options, start_offset,
*match, NULL);
*match, parse_regex->context);
return -1;
}

Expand Down Expand Up @@ -2761,8 +2761,16 @@ bool DetectSetupParseRegexesOpts(const char *parse_str, DetectParseRegex *detect
parse_str, en, errbuffer);
return false;
}
detect_parse->match = pcre2_match_data_create_from_pattern(detect_parse->regex, NULL);

detect_parse->context = pcre2_match_context_create(NULL);
if (detect_parse->context == NULL) {
SCLogError("pcre2 could not create match context");
pcre2_code_free(detect_parse->regex);
detect_parse->regex = NULL;
return false;
}
pcre2_set_match_limit(detect_parse->context, SC_MATCH_LIMIT_DEFAULT);
pcre2_set_recursion_limit(detect_parse->context, SC_MATCH_LIMIT_RECURSION_DEFAULT);
DetectParseRegexAddToFreeList(detect_parse);

return true;
Expand Down

0 comments on commit bcc65a7

Please sign in to comment.