Merge pull request #3194 from marcstern/v2/pr/PCRE_ERROR_NOMATCH

msc_regexec() != PCRE_ERROR_NOMATCH
This commit is contained in:
Ervin Hegedus 2024-08-12 16:40:40 +02:00 committed by GitHub
commit 914c1a1cb2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -120,8 +120,7 @@ static int var_args_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
/* Run the regex against the argument name. */ /* Run the regex against the argument name. */
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name, if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(arg->name, var->param) == 0) match = 1; if (strcasecmp(arg->name, var->param) == 0) match = 1;
} }
@ -198,8 +197,7 @@ static int var_args_names_generate(modsec_rec *msr, msre_var *var, msre_rule *ru
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name, if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(arg->name, var->param) == 0) match = 1; if (strcasecmp(arg->name, var->param) == 0) match = 1;
} }
@ -250,8 +248,7 @@ static int var_args_get_generate(modsec_rec *msr, msre_var *var, msre_rule *rule
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
/* Run the regex against the argument name. */ /* Run the regex against the argument name. */
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name, if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(arg->name, var->param) == 0) match = 1; if (strcasecmp(arg->name, var->param) == 0) match = 1;
} }
@ -300,8 +297,7 @@ static int var_args_get_names_generate(modsec_rec *msr, msre_var *var, msre_rule
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name, if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(arg->name, var->param) == 0) match = 1; if (strcasecmp(arg->name, var->param) == 0) match = 1;
} }
@ -352,8 +348,7 @@ static int var_args_post_generate(modsec_rec *msr, msre_var *var, msre_rule *rul
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
/* Run the regex against the argument name. */ /* Run the regex against the argument name. */
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name, if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(arg->name, var->param) == 0) match = 1; if (strcasecmp(arg->name, var->param) == 0) match = 1;
} }
@ -402,8 +397,7 @@ static int var_args_post_names_generate(modsec_rec *msr, msre_var *var, msre_rul
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name, if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(arg->name, var->param) == 0) match = 1; if (strcasecmp(arg->name, var->param) == 0) match = 1;
} }
@ -901,8 +895,7 @@ static int var_tx_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -957,8 +950,7 @@ static int var_geo_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -1018,8 +1010,7 @@ static int var_ip_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -1098,8 +1089,7 @@ static int var_session_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -1154,8 +1144,7 @@ static int var_user_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -1214,8 +1203,7 @@ static int var_global_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -1266,8 +1254,7 @@ static int var_resource_generate(modsec_rec *msr, msre_var *var, msre_rule *rule
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -1308,38 +1295,21 @@ static int var_files_tmp_contents_generate(modsec_rec *msr, msre_var *var,
if (msr->mpd == NULL) return 0; if (msr->mpd == NULL) return 0;
parts = (multipart_part **)msr->mpd->parts->elts; parts = (multipart_part **)msr->mpd->parts->elts;
for (i = 0; i < msr->mpd->parts->nelts; i++) for (i = 0; i < msr->mpd->parts->nelts; i++) {
{ if ((parts[i]->type == MULTIPART_FILE) && (parts[i]->tmp_file_name != NULL)) {
if ((parts[i]->type == MULTIPART_FILE) &&
(parts[i]->tmp_file_name != NULL))
{
int match = 0; int match = 0;
/* Figure out if we want to include this variable. */ /* Figure out if we want to include this variable. */
if (var->param == NULL) if (var->param == NULL)match = 1;
{ else {
match = 1; if (var->param_data != NULL) {
}
else
{
if (var->param_data != NULL)
{
/* Regex. */ /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, if (msc_regexec((msc_regex_t*)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
parts[i]->name, strlen(parts[i]->name),
&my_error_msg) == PCRE_ERROR_NOMATCH))
{
match = 1;
}
} }
else else {
{
/* Simple comparison. */ /* Simple comparison. */
if (strcasecmp(parts[i]->name, var->param) == 0) if (strcasecmp(parts[i]->name, var->param) == 0)match = 1;
{
match = 1;
}
} }
} }
/* If we had a match add this argument to the collection. */ /* If we had a match add this argument to the collection. */
@ -1353,10 +1323,7 @@ static int var_files_tmp_contents_generate(modsec_rec *msr, msre_var *var,
msre_var *rvar = NULL; msre_var *rvar = NULL;
file = fopen(parts[i]->tmp_file_name, "r"); file = fopen(parts[i]->tmp_file_name, "r");
if (file == NULL) if (file == NULL) continue;
{
continue;
}
full_content = (char *)apr_pcalloc(mptmp, (sizeof(char)*parts[i]->length) + 1); full_content = (char *)apr_pcalloc(mptmp, (sizeof(char)*parts[i]->length) + 1);
if (full_content == NULL) { if (full_content == NULL) {
@ -1418,8 +1385,7 @@ static int var_files_tmpnames_generate(modsec_rec *msr, msre_var *var, msre_rule
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1; if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
} }
@ -1467,8 +1433,7 @@ static int var_files_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1; if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
} }
@ -1516,8 +1481,7 @@ static int var_files_sizes_generate(modsec_rec *msr, msre_var *var, msre_rule *r
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1; if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
} }
@ -1634,8 +1598,7 @@ static int var_multipart_part_headers_generate(modsec_rec *msr, msre_var *var, m
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1; if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
} }
@ -2107,8 +2070,7 @@ static int var_perf_rules_generate(modsec_rec *msr, msre_var *var, msre_rule *ru
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key, if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(te[i].key, var->param) == 0) match = 1; if (strcasecmp(te[i].key, var->param) == 0) match = 1;
} }
@ -2593,8 +2555,7 @@ static int var_matched_vars_names_generate(modsec_rec *msr, msre_var *var, msre_
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, strlen(str->name), &my_error_msg) >= 0) match = 1;
strlen(str->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -2662,8 +2623,7 @@ static int var_matched_vars_generate(modsec_rec *msr, msre_var *var, msre_rule *
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name, if (msc_regexec((msc_regex_t *)var->param_data, str->name, strlen(str->name), &my_error_msg) >= 0) match = 1;
strlen(str->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(str->name, var->param) == 0) match = 1; if (strcasecmp(str->name, var->param) == 0) match = 1;
} }
@ -2730,8 +2690,7 @@ static int var_request_cookies_generate(modsec_rec *msr, msre_var *var, msre_rul
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key, if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(te[i].key, var->param) == 0) match = 1; if (strcasecmp(te[i].key, var->param) == 0) match = 1;
} }
@ -2785,8 +2744,7 @@ static int var_request_cookies_names_generate(modsec_rec *msr, msre_var *var, ms
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key, if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(te[i].key, var->param) == 0) match = 1; if (strcasecmp(te[i].key, var->param) == 0) match = 1;
} }
@ -2840,8 +2798,7 @@ static int var_request_headers_generate(modsec_rec *msr, msre_var *var, msre_rul
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key, if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(te[i].key, var->param) == 0) match = 1; if (strcasecmp(te[i].key, var->param) == 0) match = 1;
} }
@ -2895,8 +2852,7 @@ static int var_request_headers_names_generate(modsec_rec *msr, msre_var *var, ms
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key, if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(te[i].key, var->param) == 0) match = 1; if (strcasecmp(te[i].key, var->param) == 0) match = 1;
} }
@ -3173,8 +3129,7 @@ static int var_response_headers_generate(modsec_rec *msr, msre_var *var, msre_ru
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key, if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(te[i].key, var->param) == 0) match = 1; if (strcasecmp(te[i].key, var->param) == 0) match = 1;
} }
@ -3228,8 +3183,7 @@ static int var_response_headers_names_generate(modsec_rec *msr, msre_var *var, m
else { else {
if (var->param_data != NULL) { /* Regex. */ if (var->param_data != NULL) { /* Regex. */
char *my_error_msg = NULL; char *my_error_msg = NULL;
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key, if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
} else { /* Simple comparison. */ } else { /* Simple comparison. */
if (strcasecmp(te[i].key, var->param) == 0) match = 1; if (strcasecmp(te[i].key, var->param) == 0) match = 1;
} }