Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 0921E200B66 for ; Thu, 4 Aug 2016 00:58:19 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 07A03160A8C; Wed, 3 Aug 2016 22:58:19 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id C9D82160A86 for ; Thu, 4 Aug 2016 00:58:17 +0200 (CEST) Received: (qmail 10885 invoked by uid 500); 3 Aug 2016 22:58:17 -0000 Mailing-List: contact cvs-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: List-Post: List-Id: Delivered-To: mailing list cvs@httpd.apache.org Received: (qmail 10876 invoked by uid 99); 3 Aug 2016 22:58:16 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 03 Aug 2016 22:58:16 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 8B36D180672 for ; Wed, 3 Aug 2016 22:58:16 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -0.426 X-Spam-Level: X-Spam-Status: No, score=-0.426 tagged_above=-999 required=6.31 tests=[KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id dlt1uALhjBsr for ; Wed, 3 Aug 2016 22:58:14 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with ESMTP id 6DBBB5F24E for ; Wed, 3 Aug 2016 22:58:13 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 796CFE0069 for ; Wed, 3 Aug 2016 22:58:12 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 8D40F3A00EC for ; Wed, 3 Aug 2016 22:58:11 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1755124 - /httpd/httpd/trunk/server/protocol.c Date: Wed, 03 Aug 2016 22:58:11 -0000 To: cvs@httpd.apache.org From: wrowe@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20160803225811.8D40F3A00EC@svn01-us-west.apache.org> archived-at: Wed, 03 Aug 2016 22:58:19 -0000 Author: wrowe Date: Wed Aug 3 22:58:10 2016 New Revision: 1755124 URL: http://svn.apache.org/viewvc?rev=1755124&view=rev Log: Reformat for indentation following r1755123, Whitespace Only Modified: httpd/httpd/trunk/server/protocol.c Modified: httpd/httpd/trunk/server/protocol.c URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/protocol.c?rev=1755124&r1=1755123&r2=1755124&view=diff ============================================================================== --- httpd/httpd/trunk/server/protocol.c (original) +++ httpd/httpd/trunk/server/protocol.c Wed Aug 3 22:58:10 2016 @@ -847,181 +847,180 @@ AP_DECLARE(void) ap_get_mime_headers_cor return; } - /* This line is a continuation of the preceding line(s), - * so append it to the line that we've set aside. - * Note: this uses a power-of-two allocator to avoid - * doing O(n) allocs and using O(n^2) space for - * continuations that span many many lines. + /* This line is a continuation of the preceding line(s), + * so append it to the line that we've set aside. + * Note: this uses a power-of-two allocator to avoid + * doing O(n) allocs and using O(n^2) space for + * continuations that span many many lines. + */ + fold_len = last_len + len + 1; /* trailing null */ + + if (fold_len >= (apr_size_t)(r->server->limit_req_fieldsize)) { + const char *field_escaped; + + r->status = HTTP_BAD_REQUEST; + /* report what we have accumulated so far before the + * overflow (last_field) as the field with the problem */ - fold_len = last_len + len + 1; /* trailing null */ - - if (fold_len >= (apr_size_t)(r->server->limit_req_fieldsize)) { - const char *field_escaped; - - r->status = HTTP_BAD_REQUEST; - /* report what we have accumulated so far before the - * overflow (last_field) as the field with the problem - */ - field_escaped = ap_escape_html(r->pool, last_field); - apr_table_setn(r->notes, "error-notes", - apr_psprintf(r->pool, - "Size of a request header field " - "after folding " - "exceeds server limit.
\n" - "
\n%.*s\n
\n", - field_name_len(field_escaped), - field_escaped)); - ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00562) - "Request header exceeds LimitRequestFieldSize " - "after folding: %.*s", - field_name_len(last_field), last_field); - return; - } + field_escaped = ap_escape_html(r->pool, last_field); + apr_table_setn(r->notes, "error-notes", + apr_psprintf(r->pool, + "Size of a request header field " + "after folding " + "exceeds server limit.
\n" + "
\n%.*s\n
\n", + field_name_len(field_escaped), + field_escaped)); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00562) + "Request header exceeds LimitRequestFieldSize " + "after folding: %.*s", + field_name_len(last_field), last_field); + return; + } + if (fold_len > alloc_len) { + char *fold_buf; + alloc_len += alloc_len; if (fold_len > alloc_len) { - char *fold_buf; - alloc_len += alloc_len; - if (fold_len > alloc_len) { - alloc_len = fold_len; - } - fold_buf = (char *)apr_palloc(r->pool, alloc_len); - memcpy(fold_buf, last_field, last_len); - last_field = fold_buf; - } - memcpy(last_field + last_len, field, len +1); /* +1 for nul */ - /* Replace obs-fold w/ SP per RFC 7230 3.2.4 */ - if (conf->http_conformance & AP_HTTP_CONFORMANCE_STRICT) { - last_field[last_len] = ' '; - } - last_len += len; - folded = 1; - continue; + alloc_len = fold_len; + } + fold_buf = (char *)apr_palloc(r->pool, alloc_len); + memcpy(fold_buf, last_field, last_len); + last_field = fold_buf; + } + memcpy(last_field + last_len, field, len +1); /* +1 for nul */ + /* Replace obs-fold w/ SP per RFC 7230 3.2.4 */ + if (conf->http_conformance & AP_HTTP_CONFORMANCE_STRICT) { + last_field[last_len] = ' '; + } + last_len += len; + folded = 1; + continue; } else if (last_field != NULL) { - /* not a continuation line */ + /* not a continuation line */ - if (r->server->limit_req_fields + if (r->server->limit_req_fields && (++fields_read > r->server->limit_req_fields)) { - r->status = HTTP_BAD_REQUEST; + r->status = HTTP_BAD_REQUEST; + apr_table_setn(r->notes, "error-notes", + "The number of request header fields " + "exceeds this server's limit."); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00563) + "Number of request headers exceeds " + "LimitRequestFields"); + return; + } + + if (!(conf->http_conformance & AP_HTTP_CONFORMANCE_STRICT)) + { + /* Not Strict, using the legacy parser */ + + if (!(value = strchr(last_field, ':'))) { /* Find ':' or */ + r->status = HTTP_BAD_REQUEST; /* abort bad request */ apr_table_setn(r->notes, "error-notes", - "The number of request header fields " - "exceeds this server's limit."); - ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00563) - "Number of request headers exceeds " - "LimitRequestFields"); + apr_psprintf(r->pool, + "Request header field is " + "missing ':' separator.
\n" + "
\n%.*s
\n", + (int)LOG_NAME_MAX_LEN, + ap_escape_html(r->pool, last_field))); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00564) + "Request header field is missing ':' " + "separator: %.*s", (int)LOG_NAME_MAX_LEN, + last_field); return; } - if (!(conf->http_conformance & AP_HTTP_CONFORMANCE_STRICT)) - { - /* Not Strict, using the legacy parser */ - - if (!(value = strchr(last_field, ':'))) { /* Find ':' or */ - r->status = HTTP_BAD_REQUEST; /* abort bad request */ - apr_table_setn(r->notes, "error-notes", - apr_psprintf(r->pool, - "Request header field is " - "missing ':' separator.
\n" - "
\n%.*s
\n", - (int)LOG_NAME_MAX_LEN, - ap_escape_html(r->pool, - last_field))); - ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(00564) - "Request header field is missing ':' " - "separator: %.*s", (int)LOG_NAME_MAX_LEN, - last_field); - return; - } - - tmp_field = value - 1; /* last character of field-name */ + tmp_field = value - 1; /* last character of field-name */ - *value++ = '\0'; /* NUL-terminate at colon */ + *value++ = '\0'; /* NUL-terminate at colon */ - while (*value == ' ' || *value == '\t') { - ++value; /* Skip to start of value */ - } + while (*value == ' ' || *value == '\t') { + ++value; /* Skip to start of value */ + } - /* Strip LWS after field-name: */ - while (tmp_field > last_field + /* Strip LWS after field-name: */ + while (tmp_field > last_field && (*tmp_field == ' ' || *tmp_field == '\t')) { - *tmp_field-- = '\0'; - } + *tmp_field-- = '\0'; + } - /* Strip LWS after field-value: */ - tmp_field = last_field + last_len - 1; - while (tmp_field > value + /* Strip LWS after field-value: */ + tmp_field = last_field + last_len - 1; + while (tmp_field > value && (*tmp_field == ' ' || *tmp_field == '\t')) { - *tmp_field-- = '\0'; - } + *tmp_field-- = '\0'; + } + } + else /* Using strict RFC7230 parsing */ + { + /* Ensure valid token chars before ':' per RFC 7230 3.2.4 */ + value = (char *)ap_scan_http_token(last_field); + if ((value == last_field) || *value != ':') { + r->status = HTTP_BAD_REQUEST; + apr_table_setn(r->notes, "error-notes", + apr_psprintf(r->pool, + "Request header field name " + "is malformed.
\n" + "
\n%.*s
\n", + (int)LOG_NAME_MAX_LEN, + ap_escape_html(r->pool, last_field))); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02426) + "Request header field name is malformed: " + "%.*s", (int)LOG_NAME_MAX_LEN, last_field); + return; } - else /* Using strict RFC7230 parsing */ - { - /* Ensure valid token chars before ':' per RFC 7230 3.2.4 */ - value = (char *)ap_scan_http_token(last_field); - if ((value == last_field) || *value != ':') { - r->status = HTTP_BAD_REQUEST; - apr_table_setn(r->notes, "error-notes", - apr_psprintf(r->pool, - "Request header field name " - "is malformed.
\n" - "
\n%.*s
\n", - (int)LOG_NAME_MAX_LEN, - ap_escape_html(r->pool, last_field))); - ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02426) - "Request header field name is malformed: " - "%.*s", (int)LOG_NAME_MAX_LEN, last_field); - return; - } - *value++ = '\0'; /* NUL-terminate last_field name at ':' */ + *value++ = '\0'; /* NUL-terminate last_field name at ':' */ - while (*value == ' ' || *value == '\t') { - ++value; /* Skip LWS of value */ - } + while (*value == ' ' || *value == '\t') { + ++value; /* Skip LWS of value */ + } - /* Find invalid, non-HT ctrl char, or the trailing NULL */ - tmp_field = (char *)ap_scan_http_field_content(value); - - /* Strip LWS after field-value, if string not empty */ - if (*value && (*tmp_field == '\0')) { - tmp_field--; - while (*tmp_field == ' ' || *tmp_field == '\t') { - *tmp_field-- = '\0'; - } - ++tmp_field; - } + /* Find invalid, non-HT ctrl char, or the trailing NULL */ + tmp_field = (char *)ap_scan_http_field_content(value); - /* Reject value for all garbage input (CTRLs excluding HT) - * e.g. only VCHAR / SP / HT / obs-text are allowed per - * RFC7230 3.2.6 - leave all more explicit rule enforcement - * for specific header handler logic later in the cycle - */ - if (*tmp_field != '\0') { - r->status = HTTP_BAD_REQUEST; - apr_table_setn(r->notes, "error-notes", - apr_psprintf(r->pool, - "Request header value " - "is malformed.
\n" - "
\n%.*s
\n", - (int)LOG_NAME_MAX_LEN, - ap_escape_html(r->pool, value))); - ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02427) - "Request header value is malformed: " - "%.*s", (int)LOG_NAME_MAX_LEN, value); - return; + /* Strip LWS after field-value, if string not empty */ + if (*value && (*tmp_field == '\0')) { + tmp_field--; + while (*tmp_field == ' ' || *tmp_field == '\t') { + *tmp_field-- = '\0'; } + ++tmp_field; } - apr_table_addn(r->headers_in, last_field, value); - - /* reset the alloc_len so that we'll allocate a new - * buffer if we have to do any more folding: we can't - * use the previous buffer because its contents are - * now part of r->headers_in + /* Reject value for all garbage input (CTRLs excluding HT) + * e.g. only VCHAR / SP / HT / obs-text are allowed per + * RFC7230 3.2.6 - leave all more explicit rule enforcement + * for specific header handler logic later in the cycle */ - alloc_len = 0; - /* end of logic where current line was not a continuation line */ + if (*tmp_field != '\0') { + r->status = HTTP_BAD_REQUEST; + apr_table_setn(r->notes, "error-notes", + apr_psprintf(r->pool, + "Request header value " + "is malformed.
\n" + "
\n%.*s
\n", + (int)LOG_NAME_MAX_LEN, + ap_escape_html(r->pool, value))); + ap_log_rerror(APLOG_MARK, APLOG_INFO, 0, r, APLOGNO(02427) + "Request header value is malformed: " + "%.*s", (int)LOG_NAME_MAX_LEN, value); + return; + } + } + + apr_table_addn(r->headers_in, last_field, value); + + /* reset the alloc_len so that we'll allocate a new + * buffer if we have to do any more folding: we can't + * use the previous buffer because its contents are + * now part of r->headers_in + */ + alloc_len = 0; + /* end of logic where current line was not a continuation line */ } /* Found a blank line, stop. */