From 481bb01b275c8462393ad0ea9bebf2d49331ee2c Mon Sep 17 00:00:00 2001 From: Nick Kew Date: Mon, 18 Feb 2008 08:35:44 +0000 Subject: [PATCH] http_filters: Don't send 100-continue when 4xx is due PR 43711 Reported & tested by Ragini Bisraya Patch by Chetan Reddy Reviewed: niq git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@628644 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 3 +++ modules/http/http_filters.c | 25 +++++++++++++++---------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index 61863e0332..59c601c505 100644 --- a/CHANGES +++ b/CHANGES @@ -2,6 +2,9 @@ Changes with Apache 2.3.0 [ When backported to 2.2.x, remove entry from this file ] + *) http_filters: Don't returm 100-continue on client error + PR 43711 [Chetan Reddy ] + *) mod_substitute: The default is now flattening the buckets after each substitution. This was mostly done to abide by the Principle Of Least Astonishment. The newly added 'q' flag allows for diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c index ac6f5b1ad9..4b9bbff4b4 100644 --- a/modules/http/http_filters.c +++ b/modules/http/http_filters.c @@ -325,18 +325,23 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b, (ctx->state == BODY_LENGTH && ctx->remaining > 0)) && f->r->expecting_100 && f->r->proto_num >= HTTP_VERSION(1,1) && !(f->r->eos_sent || f->r->bytes_sent)) { - char *tmp; + if (ap_is_HTTP_CLIENT_ERROR(f->r->status)) { + ctx->state = BODY_NONE; + ctx->eos_sent = 1; + } else { + char *tmp; - tmp = apr_pstrcat(f->r->pool, AP_SERVER_PROTOCOL, " ", - ap_get_status_line(100), CRLF CRLF, NULL); - apr_brigade_cleanup(bb); - e = apr_bucket_pool_create(tmp, strlen(tmp), f->r->pool, - f->c->bucket_alloc); - APR_BRIGADE_INSERT_HEAD(bb, e); - e = apr_bucket_flush_create(f->c->bucket_alloc); - APR_BRIGADE_INSERT_TAIL(bb, e); + tmp = apr_pstrcat(f->r->pool, AP_SERVER_PROTOCOL, " ", + ap_get_status_line(100), CRLF CRLF, NULL); + apr_brigade_cleanup(bb); + e = apr_bucket_pool_create(tmp, strlen(tmp), f->r->pool, + f->c->bucket_alloc); + APR_BRIGADE_INSERT_HEAD(bb, e); + e = apr_bucket_flush_create(f->c->bucket_alloc); + APR_BRIGADE_INSERT_TAIL(bb, e); - ap_pass_brigade(f->c->output_filters, bb); + ap_pass_brigade(f->c->output_filters, bb); + } } /* We can't read the chunk until after sending 100 if required. */ -- 2.40.0