From: William A. Rowe Jr Date: Thu, 22 Dec 2016 19:27:41 +0000 (+0000) Subject: Backports: r1352911 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=352455c8a52aef3e672c6272d2927675354223de;p=thirdparty%2Fapache%2Fhttpd.git Backports: r1352911 Submitted by: sf 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/branches/2.2.x-merge-http-strict@1775710 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/protocol.c b/server/protocol.c index c1aeac4ba20..ee4513edd21 100644 --- a/server/protocol.c +++ b/server/protocol.c @@ -751,19 +751,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, - "Request header exceeds LimitRequestFieldSize: " - "%.*s", field_name_len(field), field); + "Request header exceeds LimitRequestFieldSize%s" + "%.*s", + *field ? ": " : "", + field_name_len(field), field); ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, "Request header exceeds LimitRequestFieldSize: " "%.*s", field_name_len(field), field);