From: Justin Erenkrantz Date: Thu, 11 Oct 2001 01:40:32 +0000 (+0000) Subject: We can't pass in &r->remaining because we change that value on output to X-Git-Tag: 2.0.26~44 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=5c26e8775c258bcf8cc2b7de8f787a5a78dfeb80;p=thirdparty%2Fapache%2Fhttpd.git We can't pass in &r->remaining because we change that value on output to be how many bytes we read. This trounces on the r->remaining value, so we must use a local variable and subtract that from r->remaining after we read. Reviewed by: Aaron Bannert git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@91413 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/http/http_protocol.c b/modules/http/http_protocol.c index 0cce7655384..efdf838fc28 100644 --- a/modules/http/http_protocol.c +++ b/modules/http/http_protocol.c @@ -1366,8 +1366,9 @@ AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bu do { if (APR_BRIGADE_EMPTY(bb)) { + len_read = r->remaining; if (ap_get_brigade(r->input_filters, bb, AP_MODE_BLOCKING, - &r->remaining) != APR_SUCCESS) { + &len_read) != APR_SUCCESS) { /* if we actually fail here, we want to just return and * stop trying to read data from the client. */ @@ -1375,6 +1376,7 @@ AP_DECLARE(long) ap_get_client_block(request_rec *r, char *buffer, apr_size_t bu apr_brigade_destroy(bb); return -1; } + r->remaining -= len_read; } } while (APR_BRIGADE_EMPTY(bb));