Changes with Apache 2.0.15-dev
+ *) Empty out the brigade shared by ap_getline()/ap_get_client_block()
+ on error exit from ap_getline(). Some other code got upset because
+ the wrong data was in the brigade. [Greg Ames, Jeff Trawick]
+
*) Handle ap_discard_request_body() being called more than once.
[Greg Ames, Jeff Trawick]
while (1) {
if (APR_BRIGADE_EMPTY(b)) {
- if (ap_get_brigade(c->input_filters, b, AP_MODE_BLOCKING) != APR_SUCCESS ||
+ if ((retval = ap_get_brigade(c->input_filters, b, AP_MODE_BLOCKING)) != APR_SUCCESS ||
APR_BRIGADE_EMPTY(b)) {
+ apr_brigade_destroy(b);
+ if (retval != APR_EOF && retval != APR_TIMEUP) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, retval, r, "ap_get_brigade() failed");
+ }
return -1;
}
}
continue;
}
retval = apr_bucket_read(e, &temp, &length, APR_BLOCK_READ);
-
if (retval != APR_SUCCESS) {
- total = ((length < 0) && (total == 0)) ? -1 : total;
- break;
+ apr_brigade_destroy(b);
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, retval, r, "apr_bucket_read() failed");
+ if (total) {
+ break; /* report previously-read data to caller, do ap_xlate_proto_to_ascii() */
+ }
+ else {
+ return -1;
+ }
}
if ((looking_ahead) && (*temp != APR_ASCII_BLANK) && (*temp != APR_ASCII_TAB)) {
else {
/* input line was larger than the caller's buffer */
apr_brigade_destroy(b);
-
+
/* don't need to worry about req_cfg->bb being bogus.
* the request is about to die, and ErrorDocument
* redirects get a new req_cfg->bb
*/
-
+
return -1;
}