On 07/26/2007 04:48 PM, [EMAIL PROTECTED] wrote: > Author: niq > Date: Thu Jul 26 07:48:48 2007 > New Revision: 559837 > > URL: http://svn.apache.org/viewvc?view=rev&rev=559837 > Log: > Fix integer comparisons in mod_filter > PR: 41835 > > Modified: > httpd/httpd/trunk/modules/filters/mod_filter.c > > Modified: httpd/httpd/trunk/modules/filters/mod_filter.c > URL: > http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/filters/mod_filter.c?view=diff&rev=559837&r1=559836&r2=559837 > ============================================================================== > --- httpd/httpd/trunk/modules/filters/mod_filter.c (original) > +++ httpd/httpd/trunk/modules/filters/mod_filter.c Thu Jul 26 07:48:48 2007 > @@ -200,18 +200,24 @@ > 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)) { > + if (!provider->match.string) { > + match = 0; > + } > + else if (strcasecmp(str, provider->match.string)) { > match = 0; > } > break; > case STRING_CONTAINS: > + if (!provider->match.string) { > + match = 0; > + break; > + }
Hm. How can provider->match.string == NULL if provider->match_type ~ STRING_MATCH|STRING_CONTAINS? > str1 = apr_pstrdup(r->pool, str); > ap_str_tolower(str1); > if (!strstr(str1, provider->match.string)) { > @@ -219,9 +225,12 @@ > } > break; > case REGEX_MATCH: > - if (ap_regexec(provider->match.regex, str, 0, NULL, 0) > - == AP_REG_NOMATCH) { > - match = 0; > + if (!provider->match.string) { > + match = 0; Same here: How can provider->match.string = provider->match.regex == NULL if provider->match_type == REGEX_MATCH? If ap_pregcomp fails in filter_provider we should bail out there IMHO. Regards Rüdiger