From: Mladen Turk Date: Tue, 24 Oct 2006 06:33:13 +0000 (+0000) Subject: Make sure the AJP message is between 8 and 64K. X-Git-Tag: 2.3.0~2055 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=247365582c4c31c0667dabdfbb0c78d8984a2004;p=thirdparty%2Fapache%2Fhttpd.git Make sure the AJP message is between 8 and 64K. Use the provided message size when using get_brigade. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@467257 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/proxy/ajp.h b/modules/proxy/ajp.h index 60e503c7cf5..90ea325a294 100644 --- a/modules/proxy/ajp.h +++ b/modules/proxy/ajp.h @@ -130,8 +130,10 @@ struct ajp_msg #define AJP13_WS_HEADER 0x1234 #define AJP_HEADER_LEN 4 #define AJP_HEADER_SZ_LEN 2 -#define AJP_MSG_BUFFER_SZ (8*1024) -#define AJP13_MAX_SEND_BODY_SZ (AJP_MSG_BUFFER_SZ - 6) +#define AJP_HEADER_SZ 6 +#define AJP_MSG_BUFFER_SZ 8192 +#define AJP_MAX_BUFFER_SZ 16384 +#define AJP13_MAX_SEND_BODY_SZ (AJP_MAX_BUFFER_SZ - AJP_HEADER_SZ) /** Send a request from web server to container*/ #define CMD_AJP13_FORWARD_REQUEST (unsigned char)2 diff --git a/modules/proxy/mod_proxy_ajp.c b/modules/proxy/mod_proxy_ajp.c index 92e5c51ada9..bd061841873 100644 --- a/modules/proxy/mod_proxy_ajp.c +++ b/modules/proxy/mod_proxy_ajp.c @@ -135,14 +135,15 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, apr_pollfd_t *conn_poll; proxy_server_conf *psf = ap_get_module_config(r->server->module_config, &proxy_module); - apr_size_t maxsize = AP_IOBUFSIZE; + apr_size_t maxsize = AJP_MSG_BUFFER_SZ; if (psf->io_buffer_size_set) maxsize = psf->io_buffer_size; - if (maxsize > 65536) - maxsize = 65536; - if (maxsize%1024) - maxsize = ((maxsize/1024) + 1 ) * 1024; + if (maxsize > AJP_MAX_BUFFER_SZ) + maxsize = AJP_MAX_BUFFER_SZ; + else if (maxsize < AJP_MSG_BUFFER_SZ) + maxsize = AJP_MSG_BUFFER_SZ; + maxsize = APR_ALIGN(maxsize, 1024); /* * Send the AJP request to the remote server @@ -183,7 +184,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, } else { status = ap_get_brigade(r->input_filters, input_brigade, AP_MODE_READBYTES, APR_BLOCK_READ, - AJP13_MAX_SEND_BODY_SZ); + maxsize - AJP_HEADER_SZ); if (status != APR_SUCCESS) { /* We had a failure: Close connection to backend */ @@ -277,7 +278,7 @@ static int ap_proxy_ajp_request(apr_pool_t *p, request_rec *r, status = ap_get_brigade(r->input_filters, input_brigade, AP_MODE_READBYTES, APR_BLOCK_READ, - AJP13_MAX_SEND_BODY_SZ); + maxsize - AJP_HEADER_SZ); if (status != APR_SUCCESS) { ap_log_error(APLOG_MARK, APLOG_DEBUG, status, r->server,