@@ -62,6 +62,9 @@ static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *va
62
62
char * c = NULL , * name = NULL , * value = NULL ;
63
63
char * variable = NULL , * myvar = NULL ;
64
64
char * myvalue = NULL , * myname = NULL ;
65
+ msc_regex_t * regex ;
66
+ char * errptr ;
67
+ int erroffset ;
65
68
int match = 0 ;
66
69
67
70
if (msr == NULL )
@@ -115,7 +118,33 @@ static int fetch_target_exception(msre_rule *rule, modsec_rec *msr, msre_var *va
115
118
(strncasecmp (myname , name ,strlen (myname )) == 0 )) {
116
119
117
120
if (value != NULL && myvalue != NULL ) {
118
- if ((strlen (myvalue ) == strlen (value )) &&
121
+ if (strlen (value ) > 2 && value [0 ] == '/' && value [strlen (value ) - 1 ] == '/' ) {
122
+ value [strlen (value ) - 1 ] = '\0' ;
123
+ #ifdef WITH_PCRE2
124
+ regex = msc_pregcomp (msr -> mp , value + 1 ,
125
+ PCRE2_DOTALL | PCRE2_CASELESS | PCRE2_DOLLAR_ENDONLY , (const char * * )& errptr , & erroffset );
126
+ #else
127
+ regex = msc_pregcomp (msr -> mp , value + 1 ,
128
+ PCRE_DOTALL | PCRE_CASELESS | PCRE_DOLLAR_ENDONLY , (const char * * )& errptr , & erroffset );
129
+ #endif
130
+ if (regex == NULL ) {
131
+ if (msr -> txcfg -> debuglog_level >= 9 ) {
132
+ msr_log (msr , 9 , "fetch_target_exception: Regexp /%s/ failed to compile at pos %d: %s." ,
133
+ value + 1 , erroffset , errptr );
134
+ }
135
+ } else {
136
+ #ifdef WITH_PCRE2
137
+ if (!(msc_regexec (regex , myvalue , strlen (myvalue ), & errptr ) == PCRE2_ERROR_NOMATCH )) {
138
+ #else
139
+ if (!(msc_regexec (regex , myvalue , strlen (myvalue ), & errptr ) == PCRE_ERROR_NOMATCH )) {
140
+ #endif
141
+ if (msr -> txcfg -> debuglog_level >= 9 ) {
142
+ msr_log (msr , 9 , "fetch_target_exception: Target %s will not be processed." , var -> name );
143
+ }
144
+ match = 1 ;
145
+ }
146
+ }
147
+ } else if ((strlen (myvalue ) == strlen (value )) &&
119
148
strncasecmp (myvalue ,value ,strlen (myvalue )) == 0 ) {
120
149
if (msr -> txcfg -> debuglog_level >= 9 ) {
121
150
msr_log (msr , 9 , "fetch_target_exception: Target %s will not be processed." , target );
0 commit comments