You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by fi...@hyperreal.org on 1999/07/19 12:16:04 UTC
cvs commit: apache-1.3/src/main http_protocol.c
fielding 99/07/19 03:16:04
Modified: src CHANGES
src/main http_protocol.c
Log:
Fix handling of case when a client has sent "Expect: 100-continue"
and we are going to respond with an error, but get stuck waiting to
discard the body in the pointless hope of preserving the connection.
This remains less than satisfactory, since what we really should be
doing is sending the response immediately and discarding the request
body as some form of post-response cleanup. Something to consider.
PR: 4499, 3806
Submitted by: Roy Fielding, Joe Orton <je...@york.ac.uk>
Revision Changes Path
1.1397 +5 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.1396
retrieving revision 1.1397
diff -u -r1.1396 -r1.1397
--- CHANGES 1999/07/10 18:27:26 1.1396
+++ CHANGES 1999/07/19 10:15:53 1.1397
@@ -1,5 +1,10 @@
Changes with Apache 1.3.7
+ *) Fix handling of case when a client has sent "Expect: 100-continue"
+ and we are going to respond with an error, but get stuck waiting to
+ discard the body in the pointless hope of preserving the connection.
+ [Roy Fielding, Joe Orton <je...@york.ac.uk>] PR#4499, PR#3806
+
*) Fix 'configure' to work correctly with SysV-based versions of
'tr' (consistent with Configure's use as well). [Jim Jagielski]
1.272 +9 -5 apache-1.3/src/main/http_protocol.c
Index: http_protocol.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v
retrieving revision 1.271
retrieving revision 1.272
diff -u -r1.271 -r1.272
--- http_protocol.c 1999/07/03 07:59:49 1.271
+++ http_protocol.c 1999/07/19 10:15:58 1.272
@@ -1881,14 +1881,18 @@
if ((rv = ap_setup_client_block(r, REQUEST_CHUNKED_PASS)))
return rv;
- /* If we are discarding the request body, then we must already know
- * the final status code, therefore disable the sending of 100 continue.
+ /* In order to avoid sending 100 Continue when we already know the
+ * final response status, and yet not kill the connection if there is
+ * no request body to be read, we need to duplicate the test from
+ * ap_should_client_block() here negated rather than call it directly.
*/
- r->expecting_100 = 0;
-
- if (ap_should_client_block(r)) {
+ if ((r->read_length == 0) && (r->read_chunked || (r->remaining > 0))) {
char dumpbuf[HUGE_STRING_LEN];
+ if (r->expecting_100) {
+ r->connection->keepalive = -1;
+ return OK;
+ }
ap_hard_timeout("reading request body", r);
while ((rv = ap_get_client_block(r, dumpbuf, HUGE_STRING_LEN)) > 0)
continue;