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 <[EMAIL PROTECTED]>
  
  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 <[EMAIL PROTECTED]>] 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;
  
  
  

Reply via email to