]> granicus.if.org Git - apache/commitdiff
cleanup handle_set function
authorAndré Malo <nd@apache.org>
Fri, 22 Aug 2003 22:44:37 +0000 (22:44 +0000)
committerAndré Malo <nd@apache.org>
Fri, 22 Aug 2003 22:44:37 +0000 (22:44 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@101067 13f79535-47bb-0310-9956-ffa450edef68

modules/filters/mod_include.c

index e91d5f7d454aac1905f95cb2fb18a953a1e6c7e2..8fd2ea9eb0393e2b57adfb7c0aa781bc60cdc4f7 100644 (file)
@@ -2350,17 +2350,34 @@ static apr_status_t handle_endif(include_ctx_t *ctx, ap_filter_t *f,
     return APR_SUCCESS;
 }
 
+/*
+ * <!--#set var="..." value="..." ... -->
+ */
 static apr_status_t handle_set(include_ctx_t *ctx, ap_filter_t *f,
                                apr_bucket_brigade *bb)
 {
-    char *tag     = NULL;
-    char *tag_val = NULL;
-    char *var     = NULL;
-    char *parsed_string;
+    char *var = NULL;
     request_rec *r = f->r;
     request_rec *sub = r->main;
     apr_pool_t *p = r->pool;
 
+    if (ctx->argc < 2) {
+        ap_log_rerror(APLOG_MARK,
+                      (ctx->flags & SSI_FLAG_PRINTING)
+                          ? APLOG_ERR : APLOG_WARNING,
+                      0, r, "missing argument for set element in %s",
+                      r->filename);
+    }
+
+    if (!(ctx->flags & SSI_FLAG_PRINTING)) {
+        return APR_SUCCESS;
+    }
+
+    if (ctx->argc < 2) {
+        SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
+        return APR_SUCCESS;
+    }
+
     /* we need to use the 'main' request pool to set notes as that is 
      * a notes lifetime
      */
@@ -2369,39 +2386,42 @@ static apr_status_t handle_set(include_ctx_t *ctx, ap_filter_t *f,
         sub = sub->main;
     }
 
-    if (ctx->flags & SSI_FLAG_PRINTING) {
-        while (1) {
-            ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
-            if (!tag && !tag_val) {
-                return APR_SUCCESS;
-            }
-            else if (!tag_val) {
-                return APR_SUCCESS;
-            }
-            else if (!strcmp(tag, "var")) {
-                var = ap_ssi_parse_string(r, ctx, tag_val, NULL,
-                                          MAX_STRING_LEN, SSI_EXPAND_DROP_NAME);
-            }
-            else if (!strcmp(tag, "value")) {
-                if (var == (char *) NULL) {
-                    ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
-                           "variable must precede value in set directive in %s",
-                           r->filename);
-                    SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
-                    return APR_SUCCESS;
-                }
-                parsed_string = ap_ssi_parse_string(r, ctx, tag_val, NULL, 
-                                                    MAX_STRING_LEN,
-                                                    SSI_EXPAND_DROP_NAME);
-                apr_table_setn(r->subprocess_env, apr_pstrdup(p, var),
-                               apr_pstrdup(p, parsed_string));
-            }
-            else {
-                ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r,
-                            "Invalid tag for set directive in %s", r->filename);
+    while (1) {
+        char *tag = NULL;
+        char *tag_val = NULL;
+
+        ap_ssi_get_tag_and_value(ctx, &tag, &tag_val, SSI_VALUE_DECODED);
+
+        if (!tag || !tag_val) {
+            break;
+        }
+
+        if (!strcmp(tag, "var")) {
+            var = ap_ssi_parse_string(r, ctx, tag_val, NULL, MAX_STRING_LEN,
+                                      SSI_EXPAND_DROP_NAME);
+        }
+        else if (!strcmp(tag, "value")) {
+            char *parsed_string;
+
+            if (!var) {
+                ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "variable must "
+                              "precede value in set directive in %s",
+                              r->filename);
                 SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
-                return APR_SUCCESS;
+                break;
             }
+
+            parsed_string = ap_ssi_parse_string(r, ctx, tag_val, NULL,
+                                                MAX_STRING_LEN,
+                                                SSI_EXPAND_DROP_NAME);
+            apr_table_setn(r->subprocess_env, apr_pstrdup(p, var),
+                           apr_pstrdup(p, parsed_string));
+        }
+        else {
+            ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "Invalid tag for set "
+                          "directive in %s", r->filename);
+            SSI_CREATE_ERROR_BUCKET(ctx, f, bb);
+            break;
         }
     }