httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From n..@apache.org
Subject svn commit: r559837 - /httpd/httpd/trunk/modules/filters/mod_filter.c
Date Thu, 26 Jul 2007 14:48:49 GMT
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;
+                }
                 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;
+                }
+		else if (ap_regexec(provider->match.regex, str, 0, NULL, 0)
+                         == AP_REG_NOMATCH) {
+                    match = 0;
                 }
                 break;
             case INT_EQ:
@@ -229,23 +238,26 @@
                     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;



Mime
View raw message