]> granicus.if.org Git - apache/commitdiff
Make sure that a triggering LimitRequestFieldSize is always logged, even if the
authorStefan Fritsch <sf@apache.org>
Fri, 22 Jun 2012 14:57:30 +0000 (14:57 +0000)
committerStefan Fritsch <sf@apache.org>
Fri, 22 Jun 2012 14:57:30 +0000 (14:57 +0000)
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

index 4fcff4da40eeb2e0e7d3f3caf288d3e8fb4c3016..30b3cd5eeff20a891bf7bdf46913e4d69a82297b 100644 (file)
@@ -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.<br />\n"
                                            "<pre>\n%.*s\n</pre>\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;
         }