match = 0;
}
}
- else if (!provider->match.string) {
- match = 0;
- }
+ /* we can't check for NULL in provider as that kills integer 0
+ * so we have to test each string/regexp case in the switch
+ */
else {
- /* Now we have no nulls, so we can do string and regexp matching */
switch (provider->match_type) {
case STRING_MATCH:
if (strcasecmp(str, provider->match.string)) {
case REGEX_MATCH:
if (ap_regexec(provider->match.regex, str, 0, NULL, 0)
== AP_REG_NOMATCH) {
- match = 0;
+ match = 0;
}
break;
case INT_EQ:
match = 0;
}
break;
+ /* Integer comparisons should be [var] OP [match]
+ * We need to set match = 0 if the condition fails
+ */
case INT_LT:
- if (atoi(str) < provider->match.number) {
+ if (atoi(str) >= provider->match.number) {
match = 0;
}
break;
case INT_LE:
- if (atoi(str) <= provider->match.number) {
+ if (atoi(str) > provider->match.number) {
match = 0;
}
break;
case INT_GT:
- if (atoi(str) > provider->match.number) {
+ if (atoi(str) <= provider->match.number) {
match = 0;
}
break;
case INT_GE:
- if (atoi(str) >= provider->match.number) {
+ if (atoi(str) < provider->match.number) {
match = 0;
}
break;
match,
rxend-match),
flags);
+ if (provider->match.regex == NULL) {
+ return "Bad regexp";
+ }
break;
case '*':
provider->match_type = DEFINED;