From a3c194f96322f7acbb9c515ddfaa80307b05737c Mon Sep 17 00:00:00 2001 From: Justin Erenkrantz Date: Tue, 28 May 2002 23:55:53 +0000 Subject: [PATCH] Switch the limit directive enforcement error paths to match the error handling code for invalid chunk sizes. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@95332 13f79535-47bb-0310-9956-ffa450edef68 --- modules/http/http_protocol.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index c5301f0841..cab5984578 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -806,12 +806,19 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b, * time, stop it here if it is invalid. */ if (ctx->limit && ctx->limit < ctx->remaining) { + apr_bucket_brigade *bb; ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r, "Requested content-length of %" APR_OFF_T_FMT " is larger than the configured limit" " of %" APR_OFF_T_FMT, ctx->remaining, ctx->limit); - ap_die(HTTP_REQUEST_ENTITY_TOO_LARGE, f->r); - return APR_EGENERAL; + bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc); + e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL, + f->r->connection->pool, + f->r->connection->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, e); + e = apr_bucket_eos_create(f->r->connection->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, e); + return ap_pass_brigade(f->r->output_filters, bb); } } @@ -957,12 +964,19 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b, * really count. This seems to be up for interpretation. */ ctx->limit_used += totalread; if (ctx->limit < ctx->limit_used) { + apr_bucket_brigade *bb; ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, f->r, "Read content-length of %" APR_OFF_T_FMT " is larger than the configured limit" " of %" APR_OFF_T_FMT, ctx->limit_used, ctx->limit); - ap_die(HTTP_REQUEST_ENTITY_TOO_LARGE, f->r); - return APR_EGENERAL; + bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc); + e = ap_bucket_error_create(HTTP_REQUEST_ENTITY_TOO_LARGE, NULL, + f->r->connection->pool, + f->r->connection->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, e); + e = apr_bucket_eos_create(f->r->connection->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, e); + return ap_pass_brigade(f->r->output_filters, bb); } } -- 2.50.1