MCPcopy Create free account
hub / github.com/apache/httpd / ap_expr_exec_ctx

Function ap_expr_exec_ctx

server/util_expr_eval.c:827–879  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

825}
826
827AP_DECLARE(int) ap_expr_exec_ctx(ap_expr_eval_ctx_t *ctx)
828{
829 int rc;
830
831 AP_DEBUG_ASSERT(ctx->p != NULL);
832 /* XXX: allow r, c == NULL */
833 AP_DEBUG_ASSERT(ctx->r != NULL);
834 AP_DEBUG_ASSERT(ctx->c != NULL);
835 AP_DEBUG_ASSERT(ctx->s != NULL);
836 AP_DEBUG_ASSERT(ctx->err != NULL);
837 AP_DEBUG_ASSERT(ctx->info != NULL);
838 if (ctx->re_pmatch) {
839 AP_DEBUG_ASSERT(ctx->re_source != NULL);
840 AP_DEBUG_ASSERT(ctx->re_nmatch > 0);
841 }
842 ctx->reclvl = 0;
843
844 *ctx->err = NULL;
845 if (ctx->info->flags & AP_EXPR_FLAG_STRING_RESULT) {
846 *ctx->result_string = ap_expr_eval_word(ctx, ctx->info->root_node);
847 if (*ctx->err != NULL) {
848 ap_log_rerror(LOG_MARK(ctx->info), APLOG_ERR, 0, ctx->r,
849 "Evaluation of expression from %s:%d failed: %s",
850 ctx->info->filename, ctx->info->line_number, *ctx->err);
851 return -1;
852 } else {
853 ap_log_rerror(LOG_MARK(ctx->info), APLOG_TRACE4, 0, ctx->r,
854 "Evaluation of string expression from %s:%d gave: %s",
855 ctx->info->filename, ctx->info->line_number,
856 *ctx->result_string);
857 return 1;
858 }
859 }
860 else {
861 rc = ap_expr_eval(ctx, ctx->info->root_node);
862 if (*ctx->err != NULL) {
863 ap_log_rerror(LOG_MARK(ctx->info), APLOG_ERR, 0, ctx->r,
864 "Evaluation of expression from %s:%d failed: %s",
865 ctx->info->filename, ctx->info->line_number, *ctx->err);
866 return -1;
867 } else {
868 rc = rc ? 1 : 0;
869 ap_log_rerror(LOG_MARK(ctx->info), APLOG_TRACE4, 0, ctx->r,
870 "Evaluation of expression from %s:%d gave: %d",
871 ctx->info->filename, ctx->info->line_number, rc);
872
873 if (ctx->vary_this && *ctx->vary_this)
874 apr_table_merge(ctx->r->headers_out, "Vary", *ctx->vary_this);
875
876 return rc;
877 }
878 }
879}
880
881AP_DECLARE(int) ap_expr_exec_re(request_rec *r, const ap_expr_info_t *info,
882 apr_size_t nmatch, ap_regmatch_t *pmatch,

Callers 4

parse_ap_exprFunction · 0.85
ap_expr_exec_reFunction · 0.85
ap_expr_str_exec_reFunction · 0.85
ap_expr.hFile · 0.85

Calls 2

ap_expr_eval_wordFunction · 0.85
ap_expr_evalFunction · 0.85

Tested by

no test coverage detected