Commit a3c194f9 authored by Justin Erenkrantz's avatar Justin Erenkrantz
Browse files

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
parent 9bd73bf6
Loading
Loading
Loading
Loading
+18 −4
Changes for modules/http/http_protocol.c: 18 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -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);
        }
    }