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

Reply via email to