]> granicus.if.org Git - apache/commitdiff
fix error handling during flag parsing
authorAndré Malo <nd@apache.org>
Tue, 27 Jan 2004 00:22:10 +0000 (00:22 +0000)
committerAndré Malo <nd@apache.org>
Tue, 27 Jan 2004 00:22:10 +0000 (00:22 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@102417 13f79535-47bb-0310-9956-ffa450edef68

modules/mappers/mod_rewrite.c

index 94cdb5bde80056d3f4900574a2db1fa7974f3361..e5e054082d735357da03cc1a5e9ad7809e6f56e6 100644 (file)
@@ -3107,7 +3107,7 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
                                            char *key, char *val)
 {
     rewriterule_entry *cfg = _cfg;
-    int status = 0;
+    int error = 0;
 
     switch (*key++) {
     case 'c':
@@ -3133,6 +3133,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
             cp->next = NULL;
             cp->data = val;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'e':
@@ -3154,6 +3157,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
             cp->next = NULL;
             cp->data = val;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'f':
@@ -3162,6 +3168,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
             cfg->flags |= (RULEFLAG_STATUS | RULEFLAG_NOSUB);
             cfg->forced_responsecode = HTTP_FORBIDDEN;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'g':
@@ -3170,6 +3179,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
             cfg->flags |= (RULEFLAG_STATUS | RULEFLAG_NOSUB);
             cfg->forced_responsecode = HTTP_GONE;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'h':
@@ -3177,6 +3189,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
         if (!*key || !strcasecmp(key, "andler")) {         /* handler */
             cfg->forced_handler = val;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'l':
@@ -3184,6 +3199,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
         if (!*key || !strcasecmp(key, "ast")) {            /* last */
             cfg->flags |= RULEFLAG_LASTRULE;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'n':
@@ -3203,6 +3221,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
             || !strcasecmp(key, "ocase")) {                /* nocase */
             cfg->flags |= RULEFLAG_NOCASE;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'p':
@@ -3214,6 +3235,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
             || !strcasecmp(key, "assthrough")) {           /* passthrough */
             cfg->flags |= RULEFLAG_PASSTHROUGH;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'q':
@@ -3222,11 +3246,16 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
             || !strcasecmp(key, "qsappend")) {             /* qsappend */
             cfg->flags |= RULEFLAG_QSAPPEND;
         }
+        else {
+            ++error;
+        }
         break;
 
     case 'r':
     case 'R':
         if (!*key || !strcasecmp(key, "edirect")) {        /* redirect */
+            int status = 0;
+
             cfg->flags |= RULEFLAG_FORCEREDIRECT;
             if (strlen(val) > 0) {
                 if (strcasecmp(val, "permanent") == 0) {
@@ -3258,6 +3287,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
                 cfg->forced_responsecode = status;
             }
         }
+        else {
+            ++error;
+        }
         break;
 
     case 's':
@@ -3265,6 +3297,9 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
         if (!*key || !strcasecmp(key, "kip")) {            /* skip */
             cfg->skip = atoi(val);
         }
+        else {
+            ++error;
+        }
         break;
 
     case 't':
@@ -3272,10 +3307,18 @@ static const char *cmd_rewriterule_setflag(apr_pool_t *p, void *_cfg,
         if (!*key || !strcasecmp(key, "ype")) {            /* type */
             cfg->forced_mimetype = val;
         }
+        else {
+            ++error;
+        }
         break;
 
     default:
-        return apr_pstrcat(p, "RewriteRule: unknown flag '", key, "'", NULL);
+        ++error;
+        break;
+    }
+
+    if (error) {
+        return apr_pstrcat(p, "RewriteRule: unknown flag '", --key, "'", NULL);
     }
 
     return NULL;