diff options
author | Eric Covener <covener@apache.org> | 2016-12-08 19:54:49 +0000 |
---|---|---|
committer | Eric Covener <covener@apache.org> | 2016-12-08 19:54:49 +0000 |
commit | 8763c1b88e3a2af3b316baecf8644be05b078ed3 (patch) | |
tree | d0b555a6e6231c1760be18358e6df3dbd8cd8cb4 | |
parent | 8f418b2e628fb3dcca4467f26baf702acdc0c9fc (diff) | |
download | httpd-8763c1b88e3a2af3b316baecf8644be05b078ed3.tar.gz |
revert r1773285
breaks some existing tests. Needs more work.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1773292 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | modules/http/http_filters.c | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c index a7a55223f2..ce922ff8f4 100644 --- a/modules/http/http_filters.c +++ b/modules/http/http_filters.c @@ -632,7 +632,6 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b, struct check_header_ctx { request_rec *r; int strict; - const char *badheader; }; /* check a single header, to be used with apr_table_do() */ @@ -658,7 +657,6 @@ static int check_header(void *arg, const char *name, const char *val) "Response header name '%s' contains invalid " "characters, aborting request", name); - ctx->badheader = name; return 0; } @@ -668,7 +666,6 @@ static int check_header(void *arg, const char *name, const char *val) "Response header '%s' value of '%s' contains invalid " "characters, aborting request", name, val); - ctx->badheader = name; return 0; } return 1; @@ -683,21 +680,13 @@ static APR_INLINE int check_headers(request_rec *r) struct check_header_ctx ctx; core_server_config *conf = ap_get_core_module_config(r->server->module_config); - int rv = 1; ctx.r = r; ctx.strict = (conf->http_conformance != AP_HTTP_CONFORMANCE_UNSAFE); - ctx.badheader = NULL; + if (!apr_table_do(check_header, &ctx, r->headers_out, NULL)) + return 0; /* problem has been logged by check_header() */ - while (!apr_table_do(check_header, &ctx, r->headers_out, NULL)){ - if (ctx.badheader) { - apr_table_unset(r->headers_out, ctx.badheader); - apr_table_unset(r->err_headers_out, ctx.badheader); - } - rv = 0; /* problem has been logged by check_header() */ - } - - return rv; + return 1; } typedef struct header_struct { @@ -1260,7 +1249,8 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, } if (!check_headers(r)) { - r->status = 500; + ap_die(HTTP_INTERNAL_SERVER_ERROR, r); + return AP_FILTER_ERROR; } /* |