]> granicus.if.org Git - apache/commitdiff
http_filters: Don't send 100-continue when 4xx is due
authorNick Kew <niq@apache.org>
Mon, 18 Feb 2008 08:35:44 +0000 (08:35 +0000)
committerNick Kew <niq@apache.org>
Mon, 18 Feb 2008 08:35:44 +0000 (08:35 +0000)
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
modules/http/http_filters.c

diff --git a/CHANGES b/CHANGES
index 61863e03327efcbdc2c0acc9a52f63fc8058c1b5..59c601c5057e267d994d99592ecace753f054a0d 100644 (file)
--- 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 <chetanreddy gmail.com>]
+
   *) 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
index ac6f5b1ad92d38f9d60891e58c1322cf957855d4..4b9bbff4b497ce8459774054ade2ca1864cd9e1d 100644 (file)
@@ -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. */