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 行,下次错误没有出现