From 83701ac5ccff8b436b8868bf5bd0afdb5a0d3021 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Fri, 22 Jun 2012 14:57:30 +0000 Subject: [PATCH] Make sure that a triggering LimitRequestFieldSize is always logged, even if the first read already exeeds the limit and ap_rgetline does not return a header name. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1352911 13f79535-47bb-0310-9956-ffa450edef68 --- server/protocol.c | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/server/protocol.c b/server/protocol.c index 4fcff4da40..30b3cd5eef 100644 --- a/server/protocol.c +++ b/server/protocol.c @@ -746,19 +746,29 @@ AP_DECLARE(void) ap_get_mime_headers_core(request_rec *r, apr_bucket_brigade *bb * finding the end-of-line. This is only going to happen if it * exceeds the configured limit for a field size. */ - if (rv == APR_ENOSPC && field) { - /* ensure ap_escape_html will terminate correctly */ - field[len - 1] = '\0'; + if (rv == APR_ENOSPC) { + const char *field_escaped; + if (field) { + /* ensure ap_escape_html will terminate correctly */ + field[len - 1] = '\0'; + field_escaped = ap_escape_html(r->pool, field); + } + else { + field_escaped = field = ""; + } + apr_table_setn(r->notes, "error-notes", apr_psprintf(r->pool, "Size of a request header field " "exceeds server limit.
\n" "
\n%.*s\n
\n", - field_name_len(field), - ap_escape_html(r->pool, field))); + field_name_len(field_escaped), + field_escaped)); ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00561) - "Request header exceeds LimitRequestFieldSize: " - "%.*s", field_name_len(field), field); + "Request header exceeds LimitRequestFieldSize%s" + "%.*s", + *field ? ": " : "", + field_name_len(field), field); } return; } -- 2.50.0