| 825 | } |
| 826 | |
| 827 | AP_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 | |
| 881 | AP_DECLARE(int) ap_expr_exec_re(request_rec *r, const ap_expr_info_t *info, |
| 882 | apr_size_t nmatch, ap_regmatch_t *pmatch, |
no test coverage detected