aboutsummaryrefslogtreecommitdiff
path: root/src/http/v3/ngx_http_v3_request.c
diff options
context:
space:
mode:
authorRoman Arutyunyan <arut@nginx.com>2020-07-02 16:47:51 +0300
committerRoman Arutyunyan <arut@nginx.com>2020-07-02 16:47:51 +0300
commit707117276ed252e39c75769a140cbac6e18eb74a (patch)
tree4c8e1aefc4b7f23785d8a56d84421a38236eb28c /src/http/v3/ngx_http_v3_request.c
parentfd35d92232ca2332125fe9b29e53aaec33aa2176 (diff)
downloadnginx-707117276ed252e39c75769a140cbac6e18eb74a.tar.gz
nginx-707117276ed252e39c75769a140cbac6e18eb74a.zip
HTTP/3: close QUIC connection with HTTP/QPACK errors when needed.
Previously errors led only to closing streams. To simplify closing QUIC connection from a QUIC stream context, new macro ngx_http_v3_finalize_connection() is introduced. It calls ngx_quic_finalize_connection() for the parent connection.
Diffstat (limited to 'src/http/v3/ngx_http_v3_request.c')
-rw-r--r--src/http/v3/ngx_http_v3_request.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/http/v3/ngx_http_v3_request.c b/src/http/v3/ngx_http_v3_request.c
index ae65ba9ea..0ffa8927d 100644
--- a/src/http/v3/ngx_http_v3_request.c
+++ b/src/http/v3/ngx_http_v3_request.c
@@ -66,6 +66,12 @@ ngx_http_v3_parse_request(ngx_http_request_t *r, ngx_buf_t *b)
while (b->pos < b->last) {
rc = ngx_http_v3_parse_headers(c, st, *b->pos);
+ if (rc > 0) {
+ ngx_http_v3_finalize_connection(c, rc,
+ "could not parse request headers");
+ goto failed;
+ }
+
if (rc == NGX_ERROR) {
goto failed;
}
@@ -180,6 +186,12 @@ ngx_http_v3_parse_header(ngx_http_request_t *r, ngx_buf_t *b,
while (b->pos < b->last) {
rc = ngx_http_v3_parse_headers(c, st, *b->pos++);
+ if (rc > 0) {
+ ngx_http_v3_finalize_connection(c, rc,
+ "could not parse request headers");
+ return NGX_HTTP_PARSE_INVALID_HEADER;
+ }
+
if (rc == NGX_ERROR) {
return NGX_HTTP_PARSE_INVALID_HEADER;
}
@@ -359,6 +371,12 @@ ngx_http_v3_parse_request_body(ngx_http_request_t *r, ngx_buf_t *b,
while (b->pos < b->last) {
rc = ngx_http_v3_parse_data(c, st, *b->pos++);
+ if (rc > 0) {
+ ngx_http_v3_finalize_connection(c, rc,
+ "could not parse request body");
+ goto failed;
+ }
+
if (rc == NGX_ERROR) {
goto failed;
}