Mercurial > hg > nginx
comparison src/http/v3/ngx_http_v3_request.c @ 8707:ffcaf0aad9f2 quic
HTTP/3: limited client header size.
The limit is the size of all large client header buffers. Client header size
is the total size of all client header names and values.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Wed, 17 Feb 2021 11:58:32 +0300 |
parents | 3057bae4dba7 |
children | 265062a99043 |
comparison
equal
deleted
inserted
replaced
8706:3057bae4dba7 | 8707:ffcaf0aad9f2 |
---|---|
116 if (r->v3_parse == NULL) { | 116 if (r->v3_parse == NULL) { |
117 ngx_http_close_connection(c); | 117 ngx_http_close_connection(c); |
118 return; | 118 return; |
119 } | 119 } |
120 | 120 |
121 r->v3_parse->header_limit = cscf->large_client_header_buffers.size | |
122 * cscf->large_client_header_buffers.num; | |
123 | |
121 c->data = r; | 124 c->data = r; |
122 | 125 |
123 rev = c->read; | 126 rev = c->read; |
124 rev->handler = ngx_http_v3_process_request; | 127 rev->handler = ngx_http_v3_process_request; |
125 | 128 |
259 | 262 |
260 static ngx_int_t | 263 static ngx_int_t |
261 ngx_http_v3_process_header(ngx_http_request_t *r, ngx_str_t *name, | 264 ngx_http_v3_process_header(ngx_http_request_t *r, ngx_str_t *name, |
262 ngx_str_t *value) | 265 ngx_str_t *value) |
263 { | 266 { |
267 size_t len; | |
264 ngx_table_elt_t *h; | 268 ngx_table_elt_t *h; |
265 ngx_http_header_t *hh; | 269 ngx_http_header_t *hh; |
266 ngx_http_core_srv_conf_t *cscf; | 270 ngx_http_core_srv_conf_t *cscf; |
267 ngx_http_core_main_conf_t *cmcf; | 271 ngx_http_core_main_conf_t *cmcf; |
272 | |
273 len = name->len + value->len; | |
274 | |
275 if (len > r->v3_parse->header_limit) { | |
276 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0, | |
277 "client sent too large header"); | |
278 ngx_http_finalize_request(r, NGX_HTTP_REQUEST_HEADER_TOO_LARGE); | |
279 return NGX_ERROR; | |
280 } | |
281 | |
282 r->v3_parse->header_limit -= len; | |
268 | 283 |
269 if (ngx_http_v3_validate_header(r, name, value) != NGX_OK) { | 284 if (ngx_http_v3_validate_header(r, name, value) != NGX_OK) { |
270 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST); | 285 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST); |
271 return NGX_ERROR; | 286 return NGX_ERROR; |
272 } | 287 } |