From: Justin Erenkrantz Date: Wed, 29 May 2002 23:04:14 +0000 (+0000) Subject: As discussed previously on-list, HTTP_IN should return EOS if it thinks X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=054db1029e2ef8c49f380f6e9758046cf4e8b066;p=apache As discussed previously on-list, HTTP_IN should return EOS if it thinks there is no request body. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@95370 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index fd09abc39e..35037cc98e 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,8 @@ Changes with Apache 2.0.37 + *) Allow ap_http_filter (HTTP_IN) to return EOS when there is no request + body. [Justin Erenkrantz] + *) NetWare: Piping log entries through RotateLogs using the CustomLogs directive is finally supported now that we have the pipes and spawning functionality working. diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index d7c5816ae2..3939594eef 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -822,6 +822,20 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b, } } + /* If we don't have a request entity indicated by the headers, EOS. + * (BODY_NONE is a valid intermediate state due to trailers, + * but it isn't a valid starting state.) + * + * RFC 2616 Section 4.4 note 5 states that connection-close + * is invalid for a request entity - request bodies must be + * denoted by C-L or T-E: chunked. + */ + if (ctx->state == BODY_NONE) { + e = apr_bucket_eos_create(f->r->connection->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(b, e); + return APR_SUCCESS; + } + /* Since we're about to read data, send 100-Continue if needed. * Only valid on chunked and C-L bodies where the C-L is > 0. */ if ((ctx->state == BODY_CHUNK ||