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