ajp_msg_append_cvt_string():Apache 2.4 上的 BufferOverflowException
ajp_msg_append_cvt_string(): BufferOverflowException on apache 2.4
在下面来自 apache 服务器的代码中 ajp_msg.c,知道在哪里
msg->max_size 来自 ?
我正在尝试修复以下错误消息:
ajp_msg_append_cvt_string(): BufferOverflowException 4 8186
**
* Add a String in AJP message, and transform the String in ASCII
* if convert is set and we're on an EBCDIC machine
*
* @param msg AJP Message to get value from
* @param value Pointer to String
* @param convert When set told to convert String to ASCII
* @return APR_SUCCESS or error
*/
apr_status_t ajp_msg_append_string_ex(ajp_msg_t *msg, const char *value,
int convert)
{
apr_size_t len;
if (value == NULL) {
return(ajp_msg_append_uint16(msg, 0xFFFF));
}
len = strlen(value);
if ((msg->len + len + 3) > msg->max_size) {
return ajp_log_overflow(msg, "ajp_msg_append_cvt_string");
}
/* ignore error - we checked once */
ajp_msg_append_uint16(msg, (apr_uint16_t)len);
/* We checked for space !! */
memcpy(msg->buf + msg->len, value, len + 1); /* including [=11=] */
if (convert) {
/* convert from EBCDIC if needed */
ap_xlate_proto_to_ascii((char *)msg->buf + msg->len, len + 1);
}
msg->len += len + 1;
return APR_SUCCESS;
}
查看 max_packet_size
属性。 AJP 中的默认值为 8192.
此属性设置最大 AJP 数据包大小(以字节为单位)。您可以设置的最大值为 65536。如果您更改默认值,则还必须更改 Tomcat 端 AJP 连接器的 packetSize
属性!属性 packetSize
在 Tomcat 6.0.2 之后可用。
以上设置需要在tomcat-connector 和tomcat 本身中完成(必须在Tomcat 的conf/server 中的AJP 元素中进行相应设置。xml 文件)。
有关详细信息,请参阅 here。
AJP 连接上的 apache 配置中需要 ProxyIOBufferSize,tomcat 配置中需要 packetSize。 apache 配置编号必须小于或等于 tomcat packetSize。最安全的是让它们相等。
它们都设置为 64 kb,即最大允许 65,536。
在我的例子中,错误是这样的
AH00548: NameVirtualHost has no effect and will be removed in the next release /home/jadmin_q/apache2/conf/extra/httpd-vhosts.conf:1
如前所述,我打开了文件 httpd-vhosts.conf 和第 1 行并注释了 NameVirtualHost 行,下次错误没有出现
在下面来自 apache 服务器的代码中 ajp_msg.c,知道在哪里 msg->max_size 来自 ?
我正在尝试修复以下错误消息:
ajp_msg_append_cvt_string(): BufferOverflowException 4 8186
**
* Add a String in AJP message, and transform the String in ASCII
* if convert is set and we're on an EBCDIC machine
*
* @param msg AJP Message to get value from
* @param value Pointer to String
* @param convert When set told to convert String to ASCII
* @return APR_SUCCESS or error
*/
apr_status_t ajp_msg_append_string_ex(ajp_msg_t *msg, const char *value,
int convert)
{
apr_size_t len;
if (value == NULL) {
return(ajp_msg_append_uint16(msg, 0xFFFF));
}
len = strlen(value);
if ((msg->len + len + 3) > msg->max_size) {
return ajp_log_overflow(msg, "ajp_msg_append_cvt_string");
}
/* ignore error - we checked once */
ajp_msg_append_uint16(msg, (apr_uint16_t)len);
/* We checked for space !! */
memcpy(msg->buf + msg->len, value, len + 1); /* including [=11=] */
if (convert) {
/* convert from EBCDIC if needed */
ap_xlate_proto_to_ascii((char *)msg->buf + msg->len, len + 1);
}
msg->len += len + 1;
return APR_SUCCESS;
}
查看 max_packet_size
属性。 AJP 中的默认值为 8192.
此属性设置最大 AJP 数据包大小(以字节为单位)。您可以设置的最大值为 65536。如果您更改默认值,则还必须更改 Tomcat 端 AJP 连接器的 packetSize
属性!属性 packetSize
在 Tomcat 6.0.2 之后可用。
以上设置需要在tomcat-connector 和tomcat 本身中完成(必须在Tomcat 的conf/server 中的AJP 元素中进行相应设置。xml 文件)。
有关详细信息,请参阅 here。
AJP 连接上的 apache 配置中需要 ProxyIOBufferSize,tomcat 配置中需要 packetSize。 apache 配置编号必须小于或等于 tomcat packetSize。最安全的是让它们相等。
它们都设置为 64 kb,即最大允许 65,536。
在我的例子中,错误是这样的
AH00548: NameVirtualHost has no effect and will be removed in the next release /home/jadmin_q/apache2/conf/extra/httpd-vhosts.conf:1
如前所述,我打开了文件 httpd-vhosts.conf 和第 1 行并注释了 NameVirtualHost 行,下次错误没有出现