aboutsummaryrefslogtreecommitdiff
path: root/src/http/ngx_http_request.c
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2020-05-19 15:34:00 +0300
committerRoman Arutyunyan <arut@nginx.com>2020-05-19 15:34:00 +0300
commitd25937c2b596013874fcb049f10b28270ee49e29 (patch)
tree023bebd18eb7da6995d93c650f97bfcea9976683 /src/http/ngx_http_request.c
parent6abb50658fcdf6ab92a4bc9042cd7dd9bb413850 (diff)
downloadnginx-d25937c2b596013874fcb049f10b28270ee49e29.tar.gz
nginx-d25937c2b596013874fcb049f10b28270ee49e29.zip
HTTP/3: restricted symbols in header names.
As per HTTP/3 draft 27, a request or response containing uppercase header field names MUST be treated as malformed. Also, existing rules applied when parsing HTTP/1 header names are also applied to HTTP/3 header names: - null character is not allowed - underscore character may or may not be treated as invalid depending on the value of "underscores_in_headers" - all non-alphanumeric characters with the exception of '-' are treated as invalid Also, the r->locase_header field is now filled while parsing an HTTP/3 header. Error logging for invalid headers is fixed as well.
Diffstat (limited to 'src/http/ngx_http_request.c')
-rw-r--r--src/http/ngx_http_request.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index e77c4bc35..e3d217f79 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1511,7 +1511,8 @@ ngx_http_process_request_headers(ngx_event_t *rev)
switch (r->http_version) {
#if (NGX_HTTP_V3)
case NGX_HTTP_VERSION_30:
- rc = ngx_http_v3_parse_header(r, r->header_in);
+ rc = ngx_http_v3_parse_header(r, r->header_in,
+ cscf->underscores_in_headers);
break;
#endif
@@ -1530,9 +1531,10 @@ ngx_http_process_request_headers(ngx_event_t *rev)
/* there was error while a header line parsing */
ngx_log_error(NGX_LOG_INFO, c->log, 0,
- "client sent invalid header line: \"%*s\"",
- r->header_end - r->header_name_start,
- r->header_name_start);
+ "client sent invalid header line: \"%*s: %*s\"",
+ r->header_name_end - r->header_name_start,
+ r->header_name_start,
+ r->header_end - r->header_start, r->header_start);
continue;
}