]> granicus.if.org Git - apache/commitdiff
Switch the limit directive enforcement error paths to match the error handling
authorJustin Erenkrantz <jerenkrantz@apache.org>
Tue, 28 May 2002 23:55:53 +0000 (23:55 +0000)
committerJustin Erenkrantz <jerenkrantz@apache.org>
Tue, 28 May 2002 23:55:53 +0000 (23:55 +0000)
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

index c5301f084128afa3baf0a41f5a7e73a461418b0e..cab5984578de88b9e10a7f1d25799be91cfdf4e0 100644 (file)
@@ -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);
         }
     }