From: André Malo Date: Fri, 22 Aug 2003 22:44:37 +0000 (+0000) Subject: cleanup handle_set function X-Git-Tag: pre_ajp_proxy~1235 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e190a7113feddbafbf4bb2979ad012722d672046;p=apache cleanup handle_set function git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@101067 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/filters/mod_include.c b/modules/filters/mod_include.c index e91d5f7d45..8fd2ea9eb0 100644 --- a/modules/filters/mod_include.c +++ b/modules/filters/mod_include.c @@ -2350,17 +2350,34 @@ static apr_status_t handle_endif(include_ctx_t *ctx, ap_filter_t *f, return APR_SUCCESS; } +/* + * + */ 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; } }