Skip to content

Commit 914c1a1

Browse files
authored
Merge pull request #3194 from marcstern/v2/pr/PCRE_ERROR_NOMATCH
msc_regexec() != PCRE_ERROR_NOMATCH
2 parents e424598 + 9b987cc commit 914c1a1

File tree

1 file changed

+35
-81
lines changed

1 file changed

+35
-81
lines changed

apache2/re_variables.c

+35-81
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,7 @@ static int var_args_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
120120
if (var->param_data != NULL) { /* Regex. */
121121
char *my_error_msg = NULL;
122122
/* Run the regex against the argument name. */
123-
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name,
124-
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
123+
if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
125124
} else { /* Simple comparison. */
126125
if (strcasecmp(arg->name, var->param) == 0) match = 1;
127126
}
@@ -198,8 +197,7 @@ static int var_args_names_generate(modsec_rec *msr, msre_var *var, msre_rule *ru
198197
else {
199198
if (var->param_data != NULL) { /* Regex. */
200199
char *my_error_msg = NULL;
201-
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name,
202-
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
200+
if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
203201
} else { /* Simple comparison. */
204202
if (strcasecmp(arg->name, var->param) == 0) match = 1;
205203
}
@@ -250,8 +248,7 @@ static int var_args_get_generate(modsec_rec *msr, msre_var *var, msre_rule *rule
250248
if (var->param_data != NULL) { /* Regex. */
251249
char *my_error_msg = NULL;
252250
/* Run the regex against the argument name. */
253-
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name,
254-
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
251+
if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
255252
} else { /* Simple comparison. */
256253
if (strcasecmp(arg->name, var->param) == 0) match = 1;
257254
}
@@ -300,8 +297,7 @@ static int var_args_get_names_generate(modsec_rec *msr, msre_var *var, msre_rule
300297
else {
301298
if (var->param_data != NULL) { /* Regex. */
302299
char *my_error_msg = NULL;
303-
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name,
304-
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
300+
if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
305301
} else { /* Simple comparison. */
306302
if (strcasecmp(arg->name, var->param) == 0) match = 1;
307303
}
@@ -352,8 +348,7 @@ static int var_args_post_generate(modsec_rec *msr, msre_var *var, msre_rule *rul
352348
if (var->param_data != NULL) { /* Regex. */
353349
char *my_error_msg = NULL;
354350
/* Run the regex against the argument name. */
355-
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name,
356-
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
351+
if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
357352
} else { /* Simple comparison. */
358353
if (strcasecmp(arg->name, var->param) == 0) match = 1;
359354
}
@@ -402,8 +397,7 @@ static int var_args_post_names_generate(modsec_rec *msr, msre_var *var, msre_rul
402397
else {
403398
if (var->param_data != NULL) { /* Regex. */
404399
char *my_error_msg = NULL;
405-
if (!(msc_regexec((msc_regex_t *)var->param_data, arg->name,
406-
arg->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
400+
if (msc_regexec((msc_regex_t *)var->param_data, arg->name, arg->name_len, &my_error_msg) >= 0) match = 1;
407401
} else { /* Simple comparison. */
408402
if (strcasecmp(arg->name, var->param) == 0) match = 1;
409403
}
@@ -901,8 +895,7 @@ static int var_tx_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
901895
else {
902896
if (var->param_data != NULL) { /* Regex. */
903897
char *my_error_msg = NULL;
904-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
905-
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
898+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
906899
} else { /* Simple comparison. */
907900
if (strcasecmp(str->name, var->param) == 0) match = 1;
908901
}
@@ -957,8 +950,7 @@ static int var_geo_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
957950
else {
958951
if (var->param_data != NULL) { /* Regex. */
959952
char *my_error_msg = NULL;
960-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
961-
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
953+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
962954
} else { /* Simple comparison. */
963955
if (strcasecmp(str->name, var->param) == 0) match = 1;
964956
}
@@ -1018,8 +1010,7 @@ static int var_ip_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
10181010
else {
10191011
if (var->param_data != NULL) { /* Regex. */
10201012
char *my_error_msg = NULL;
1021-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
1022-
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1013+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
10231014
} else { /* Simple comparison. */
10241015
if (strcasecmp(str->name, var->param) == 0) match = 1;
10251016
}
@@ -1098,8 +1089,7 @@ static int var_session_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
10981089
else {
10991090
if (var->param_data != NULL) { /* Regex. */
11001091
char *my_error_msg = NULL;
1101-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
1102-
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1092+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
11031093
} else { /* Simple comparison. */
11041094
if (strcasecmp(str->name, var->param) == 0) match = 1;
11051095
}
@@ -1154,8 +1144,7 @@ static int var_user_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
11541144
else {
11551145
if (var->param_data != NULL) { /* Regex. */
11561146
char *my_error_msg = NULL;
1157-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
1158-
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1147+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
11591148
} else { /* Simple comparison. */
11601149
if (strcasecmp(str->name, var->param) == 0) match = 1;
11611150
}
@@ -1214,8 +1203,7 @@ static int var_global_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
12141203
else {
12151204
if (var->param_data != NULL) { /* Regex. */
12161205
char *my_error_msg = NULL;
1217-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
1218-
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1206+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
12191207
} else { /* Simple comparison. */
12201208
if (strcasecmp(str->name, var->param) == 0) match = 1;
12211209
}
@@ -1266,8 +1254,7 @@ static int var_resource_generate(modsec_rec *msr, msre_var *var, msre_rule *rule
12661254
else {
12671255
if (var->param_data != NULL) { /* Regex. */
12681256
char *my_error_msg = NULL;
1269-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
1270-
str->name_len, &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1257+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, str->name_len, &my_error_msg) >= 0) match = 1;
12711258
} else { /* Simple comparison. */
12721259
if (strcasecmp(str->name, var->param) == 0) match = 1;
12731260
}
@@ -1308,38 +1295,21 @@ static int var_files_tmp_contents_generate(modsec_rec *msr, msre_var *var,
13081295
if (msr->mpd == NULL) return 0;
13091296

13101297
parts = (multipart_part **)msr->mpd->parts->elts;
1311-
for (i = 0; i < msr->mpd->parts->nelts; i++)
1312-
{
1313-
if ((parts[i]->type == MULTIPART_FILE) &&
1314-
(parts[i]->tmp_file_name != NULL))
1315-
{
1298+
for (i = 0; i < msr->mpd->parts->nelts; i++) {
1299+
if ((parts[i]->type == MULTIPART_FILE) && (parts[i]->tmp_file_name != NULL)) {
13161300
int match = 0;
13171301

13181302
/* Figure out if we want to include this variable. */
1319-
if (var->param == NULL)
1320-
{
1321-
match = 1;
1322-
}
1323-
else
1324-
{
1325-
if (var->param_data != NULL)
1326-
{
1303+
if (var->param == NULL)match = 1;
1304+
else {
1305+
if (var->param_data != NULL) {
13271306
/* Regex. */
13281307
char *my_error_msg = NULL;
1329-
if (!(msc_regexec((msc_regex_t *)var->param_data,
1330-
parts[i]->name, strlen(parts[i]->name),
1331-
&my_error_msg) == PCRE_ERROR_NOMATCH))
1332-
{
1333-
match = 1;
1334-
}
1308+
if (msc_regexec((msc_regex_t*)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
13351309
}
1336-
else
1337-
{
1310+
else {
13381311
/* Simple comparison. */
1339-
if (strcasecmp(parts[i]->name, var->param) == 0)
1340-
{
1341-
match = 1;
1342-
}
1312+
if (strcasecmp(parts[i]->name, var->param) == 0)match = 1;
13431313
}
13441314
}
13451315
/* 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,
13531323
msre_var *rvar = NULL;
13541324

13551325
file = fopen(parts[i]->tmp_file_name, "r");
1356-
if (file == NULL)
1357-
{
1358-
continue;
1359-
}
1326+
if (file == NULL) continue;
13601327

13611328
full_content = (char *)apr_pcalloc(mptmp, (sizeof(char)*parts[i]->length) + 1);
13621329
if (full_content == NULL) {
@@ -1418,8 +1385,7 @@ static int var_files_tmpnames_generate(modsec_rec *msr, msre_var *var, msre_rule
14181385
else {
14191386
if (var->param_data != NULL) { /* Regex. */
14201387
char *my_error_msg = NULL;
1421-
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name,
1422-
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1388+
if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
14231389
} else { /* Simple comparison. */
14241390
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
14251391
}
@@ -1467,8 +1433,7 @@ static int var_files_generate(modsec_rec *msr, msre_var *var, msre_rule *rule,
14671433
else {
14681434
if (var->param_data != NULL) { /* Regex. */
14691435
char *my_error_msg = NULL;
1470-
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name,
1471-
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1436+
if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
14721437
} else { /* Simple comparison. */
14731438
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
14741439
}
@@ -1516,8 +1481,7 @@ static int var_files_sizes_generate(modsec_rec *msr, msre_var *var, msre_rule *r
15161481
else {
15171482
if (var->param_data != NULL) { /* Regex. */
15181483
char *my_error_msg = NULL;
1519-
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name,
1520-
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1484+
if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
15211485
} else { /* Simple comparison. */
15221486
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
15231487
}
@@ -1634,8 +1598,7 @@ static int var_multipart_part_headers_generate(modsec_rec *msr, msre_var *var, m
16341598
else {
16351599
if (var->param_data != NULL) { /* Regex. */
16361600
char *my_error_msg = NULL;
1637-
if (!(msc_regexec((msc_regex_t *)var->param_data, parts[i]->name,
1638-
strlen(parts[i]->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
1601+
if (msc_regexec((msc_regex_t *)var->param_data, parts[i]->name, strlen(parts[i]->name), &my_error_msg) >= 0) match = 1;
16391602
} else { /* Simple comparison. */
16401603
if (strcasecmp(parts[i]->name, var->param) == 0) match = 1;
16411604
}
@@ -2107,8 +2070,7 @@ static int var_perf_rules_generate(modsec_rec *msr, msre_var *var, msre_rule *ru
21072070
else {
21082071
if (var->param_data != NULL) { /* Regex. */
21092072
char *my_error_msg = NULL;
2110-
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key,
2111-
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
2073+
if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
21122074
} else { /* Simple comparison. */
21132075
if (strcasecmp(te[i].key, var->param) == 0) match = 1;
21142076
}
@@ -2593,8 +2555,7 @@ static int var_matched_vars_names_generate(modsec_rec *msr, msre_var *var, msre_
25932555
else {
25942556
if (var->param_data != NULL) { /* Regex. */
25952557
char *my_error_msg = NULL;
2596-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
2597-
strlen(str->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
2558+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, strlen(str->name), &my_error_msg) >= 0) match = 1;
25982559
} else { /* Simple comparison. */
25992560
if (strcasecmp(str->name, var->param) == 0) match = 1;
26002561
}
@@ -2662,8 +2623,7 @@ static int var_matched_vars_generate(modsec_rec *msr, msre_var *var, msre_rule *
26622623
else {
26632624
if (var->param_data != NULL) { /* Regex. */
26642625
char *my_error_msg = NULL;
2665-
if (!(msc_regexec((msc_regex_t *)var->param_data, str->name,
2666-
strlen(str->name), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
2626+
if (msc_regexec((msc_regex_t *)var->param_data, str->name, strlen(str->name), &my_error_msg) >= 0) match = 1;
26672627
} else { /* Simple comparison. */
26682628
if (strcasecmp(str->name, var->param) == 0) match = 1;
26692629
}
@@ -2730,8 +2690,7 @@ static int var_request_cookies_generate(modsec_rec *msr, msre_var *var, msre_rul
27302690
else {
27312691
if (var->param_data != NULL) { /* Regex. */
27322692
char *my_error_msg = NULL;
2733-
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key,
2734-
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
2693+
if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
27352694
} else { /* Simple comparison. */
27362695
if (strcasecmp(te[i].key, var->param) == 0) match = 1;
27372696
}
@@ -2785,8 +2744,7 @@ static int var_request_cookies_names_generate(modsec_rec *msr, msre_var *var, ms
27852744
else {
27862745
if (var->param_data != NULL) { /* Regex. */
27872746
char *my_error_msg = NULL;
2788-
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key,
2789-
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
2747+
if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
27902748
} else { /* Simple comparison. */
27912749
if (strcasecmp(te[i].key, var->param) == 0) match = 1;
27922750
}
@@ -2840,8 +2798,7 @@ static int var_request_headers_generate(modsec_rec *msr, msre_var *var, msre_rul
28402798
else {
28412799
if (var->param_data != NULL) { /* Regex. */
28422800
char *my_error_msg = NULL;
2843-
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key,
2844-
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
2801+
if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
28452802
} else { /* Simple comparison. */
28462803
if (strcasecmp(te[i].key, var->param) == 0) match = 1;
28472804
}
@@ -2895,8 +2852,7 @@ static int var_request_headers_names_generate(modsec_rec *msr, msre_var *var, ms
28952852
else {
28962853
if (var->param_data != NULL) { /* Regex. */
28972854
char *my_error_msg = NULL;
2898-
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key,
2899-
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
2855+
if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
29002856
} else { /* Simple comparison. */
29012857
if (strcasecmp(te[i].key, var->param) == 0) match = 1;
29022858
}
@@ -3173,8 +3129,7 @@ static int var_response_headers_generate(modsec_rec *msr, msre_var *var, msre_ru
31733129
else {
31743130
if (var->param_data != NULL) { /* Regex. */
31753131
char *my_error_msg = NULL;
3176-
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key,
3177-
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
3132+
if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
31783133
} else { /* Simple comparison. */
31793134
if (strcasecmp(te[i].key, var->param) == 0) match = 1;
31803135
}
@@ -3228,8 +3183,7 @@ static int var_response_headers_names_generate(modsec_rec *msr, msre_var *var, m
32283183
else {
32293184
if (var->param_data != NULL) { /* Regex. */
32303185
char *my_error_msg = NULL;
3231-
if (!(msc_regexec((msc_regex_t *)var->param_data, te[i].key,
3232-
strlen(te[i].key), &my_error_msg) == PCRE_ERROR_NOMATCH)) match = 1;
3186+
if (msc_regexec((msc_regex_t *)var->param_data, te[i].key, strlen(te[i].key), &my_error_msg) >= 0) match = 1;
32333187
} else { /* Simple comparison. */
32343188
if (strcasecmp(te[i].key, var->param) == 0) match = 1;
32353189
}

0 commit comments

Comments
 (0)